OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 26733|回复: 11

STM8S003 关于ADC模数转换的难题

[复制链接]

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-12-19
在线时间
0 小时
发表于 2014-12-19 16:48:43 | 显示全部楼层 |阅读模式
5金钱
我现在手上有一个STM8S003的单片机,想用它来做一个温控开关的主芯片。如图:


于是,我买了一个STM8S003的开发板。


下面是开发板的原理图:



设想是这样的,接一个热敏电阻。如图


一端接到PD5,因为PD5有AD功能,热敏电阻另一端接地。当温度超过40度时,让PD4输出高电平,驱动继电器。
这个热敏电阻的温度-电阻表,如下:



因为我刚接触这个单片机,对其操作不熟悉,时间又紧。

谁有类似的程序或者是可供参考的代码,可否分享一下,谢谢。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2014-12-5
在线时间
0 小时
发表于 2014-12-19 20:10:56 | 显示全部楼层
”一端接到PD5,因为PD5有AD功能,热敏电阻另一端接地。“——这样接法显然不对,PD5永远是输入0V……要在PD5上再接一上拉电阻,与热敏电阻做分压。这样热敏变化时PD5才会检测出不同的电压值,通过计算转换成你要的温度临界。
为所有员工都能买车买楼而奋斗!
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-12-19
在线时间
0 小时
 楼主| 发表于 2014-12-19 21:09:59 | 显示全部楼层
回复【2楼】BioHot:
---------------------------------
烦请大神给指导指导啊,菜鸟真的很菜
回复

使用道具 举报

6

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2014-12-5
在线时间
0 小时
发表于 2014-12-20 08:35:36 | 显示全部楼层


如图,分压电阻可以接5K~10K,以5k(图中的R1)为例计算。查你的表得热敏电阻(R2)在40度时为5.315K,分压电压为2.576V(VDD=5V时)。
stm8系列ADC为10位,即精度为2的10次方=1024,按比例计算:2.576V/5V*1024=527.5648,按528算等于十六进制0x210。
即40度临界值在芯片上应检测出0x210的数据,并放在寄存器ADC_DRH、ADC_DRL中。通过读取这两寄存器的值 并计算和判断,输出到IO脚控制继电器。
另外,按上图接法,温度升高->阻值降低->电压降低。即少于临界时输出控制。

必须指出,以上只是理论的计算值,R1、R2、VDD,在实际上会与标称值存在误差,即预期的0x210这个数可能不准,简单的方法可以用一个已校准的温度计对40度的温水做平行测量。


同时郑重声明,我也是菜鸟,发贴求助的心情,我是感同身受!以上只能参考!!也期待指正!!
更好的指导只能等论坛的大侠们了,大侠们都比较忙,表示理解,哈哈……
为所有员工都能买车买楼而奋斗!
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-12-19
在线时间
0 小时
 楼主| 发表于 2014-12-20 10:45:54 | 显示全部楼层
是这样接线吗?我怎么感觉有问题呢。

回复

使用道具 举报

6

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2014-12-5
在线时间
0 小时
发表于 2014-12-20 11:00:52 | 显示全部楼层
R1上端接VDD,两电阻的中间,引线连到PD5
为所有员工都能买车买楼而奋斗!
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-12-19
在线时间
0 小时
 楼主| 发表于 2014-12-20 11:13:24 | 显示全部楼层
回复【6楼】BioHot:
---------------------------------
好的,谢谢您的耐心解答
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-12-19
在线时间
0 小时
 楼主| 发表于 2014-12-20 11:19:46 | 显示全部楼层
就是这样接线了。画个图看看

回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2014-12-19
在线时间
0 小时
 楼主| 发表于 2014-12-20 17:09:05 | 显示全部楼层
电路图如上边所示,下面是我的代码,大家帮看看怎么修改,万分感谢,真的谢谢了。
我是想一直来检测温度,进而控制继电器是否吸合。看手册说AD有单次检测和连续检测,不过我不知道怎么用。
[mw_shl_code=c,true]/******************************************************/ //程序功能:通过测量热敏电阻温度计的值,来控制继电器是否吸合 //编程人员:kernel //编程时间:2014年12月20日 16:59:12 //修改时间: //详细说明:1.PD4接继电器的信号引脚来控制继电器 // 2.PD5也即AIN5进行AD转换,接收电阻R1的电压,并转换为AD值 // 3.MCU不停地进行AD转换,实现24小时检测当前温度 /******************************************************/ #include <iostm8s003f3.h> //开发板MCU为STM8S003 #define Fix_ADC_Value 300 //假定这个值就是温度达到40度时ADC的值 #define S1 4 #define S1_ON() PD_ODR |= (1<<(S1)) //控制继电器开 #define S1_OFF() PD_ODR &= ~ (1<<(S1)) //控制继电器关,默认是关的 void GPIO_Init(void) { PD_DDR = 0xFF; //PD所有引脚为输出引脚 PD_CR1 = 0xFF; //PD所有引脚为推挽输出 PD_CR2 = 0x0; //PD所有引脚输出速度最大为2MHZ } void ADC_Init(void) { ADC_CR1 = 0x00;//FADC=FMASTER/2、单次转换、ADC转换开关关 ADC_CR2 = 0x00;//禁止外部触发转换(选择软件启动)、数据左对齐 ADC_TDRL = 0x20;//关闭 (AIN5)施密特触发器 } void GetAdcValue(void) { ADC_CSR = 0x05; //选择通道AIN5 ADC_CR1 |= 0x01; //使能ADC i = 12; //等待7us以上的时间确保ADC上电完成 while(i--); ADC_CR1 |= 0x01; //再次置位ADON来启动ADC转换 while(!(ADC_CSR & 0x80)); //等待转换完成 AD_Value=ADC_DRH; //读取转换的高八位数据 ADC_CSR &= 0x7F; //第8位EOC置0,本次转换结束 } void CheckAdc(void) { if(AD_Value > Fix_ADC_Value) //比较测量值和设定值 { S1_ON(); //超过一定的温度了,开启继电器 } else { S1_OFF(); //温度还未超过设定值,关闭继电器 } } int main(void) { int AD_Value=0; //记录ADC的值,便于与设定的值进行比较 GPIO_Init(); //准备好继电器引脚 ADC_Init(); //准备好ADC while(1) { GetAdcValue(); //获得ADC的值 CheckAdc();         } return 0; } [/mw_shl_code]

回复

使用道具 举报

6

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2014-12-5
在线时间
0 小时
发表于 2014-12-21 16:24:36 | 显示全部楼层
程序我在stm8s105k上走了,只测试了电源+和地,能通过。
void CheckAdc(void)中,S1_ON()与S1_OFF()的位置应该对换吧?温度升高电压是降低的,你试下吧。

另外,光实现这功能的话,不需要用单片机吧,有点大海养金鱼的感觉,呵呵……
用LM393电压比较器加几个元件就完成了……
为所有员工都能买车买楼而奋斗!
回复

使用道具 举报

0

主题

6

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2014-10-25
在线时间
0 小时
发表于 2014-12-23 11:30:18 | 显示全部楼层
STM8 便宜啊……比那个芯片贵不了多少。
回复

使用道具 举报

8

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2013-10-8
在线时间
24 小时
发表于 2015-1-22 12:17:39 | 显示全部楼层
我这里ADC输入端跟数码管复用,ADC读取正常后,数码管对应的脚就没输出了,查过资料都搞不懂怎么复用,跪求大婶指点。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表