一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
楼主: junyee
收起左侧

[其他DIY] 我做的STM8 的 T12控制器

[复制链接]
发表于 2014-12-15 02:13 | 显示全部楼层
NB,真羡慕会写软件的人

点评

只要肯用心,现在学习也不晚  发表于 2014-12-15 09:06
 楼主| 发表于 2014-12-15 12:21 | 显示全部楼层
goodcode 发表于 2014-12-14 22:35
我这也是在定时器里刷新的 也不咋地

谢谢分享,不过对我来说仍不适用.
定时器轮询旋转过快会丢帧.

我用中断的方式实现,,,完善了下代码,似乎好多了.

1.jpg


无论慢转,拨一下,快速旋转...基本上看不到误码. 偶尔有一两次也可能是编码器结构所致.
上代码.
  1. #include "common.h"

  2. u8 delay_EXTI=0;
  3. u8 sw_Reset = 1;  //定义开关是否复位.未复位时忽略状态. sw_Reset 由 TIM4 查询编码开关值刷新.

  4. void EXTI_Init()//外部中断初始化
  5. {
  6.   EXTI_CR1=0X02;//PA口下降沿触发中断
  7. }

  8. #pragma vector=0x05
  9. __interrupt void EXTI_PA()
  10. {
  11. //  if (delay_EXTI !=0) return;
  12.   if (sw_Reset == 0) return;

  13. //  UART1_SendU8(PA_IDR);
  14.   if (PA_IDR_IDR3 ==0)
  15.   {
  16.     sw_Reset =0;
  17.     if (PA_IDR_IDR2 ==1)
  18.     {
  19.       UART1_SendStr("left  ");
  20.     }
  21.     else
  22.     {
  23.       UART1_SendStr("right ");
  24.     }
  25.   }
  26.   
  27. //  delay_EXTI = 50 ;
  28. }
复制代码
哈哈,谢谢大家.



 楼主| 发表于 2014-12-15 17:13 | 显示全部楼层
本帖最后由 junyee 于 2014-12-15 17:27 编辑

问题是一个一个攻破,然后又一个一个出现..

我是用PWM驱动 三极管再驱动 MOS让T12导通的.
在PWM的下降沿产生中断,在PWM输出低电平时采集经LM358放大的 热电耦电压.
那么,问题又来了.

可能是由于 MOS的G-S寄生电容.在PWM输出低电平的瞬间,T12两端的电压不是突变的,如果立即采集的话,肯定会得到一个 很大的值..
笨办法就是延时采集,尽管很有效...
用示波器查看了一下,在关断后100uS左右的数据都不稳定,实测在 PWM 产生更新中断后,延时150uS左右可以得到较稳定的值.
我不想用笨办法,,该怎么办?

 楼主| 发表于 2014-12-15 17:29 | 显示全部楼层
刚看了下金向维的代码..
2.jpg

惊人的2mS...
发表于 2014-12-15 23:24 | 显示全部楼层
junyee 发表于 2014-12-15 12:21
谢谢分享,不过对我来说仍不适用.
定时器轮询旋转过快会丢帧.

204ea中断是费的呵呵 不过我觉着按键类的操作还是放哪轮训的好 要不总中断

发表于 2014-12-15 23:36 | 显示全部楼层
junyee 发表于 2014-12-15 17:13
问题是一个一个攻破,然后又一个一个出现..

我是用PWM驱动 三极管再驱动 MOS让T12导通的.

一直没购置示波器有快两年没折腾到模拟电路了, 我那也跟金向维一样延迟很久再读取温度的.
PWM频率高了开关电源会啸叫 所以感觉慢点来就行 本来这东西就很顿
  1.             T12_OFF; //停止加热
  2.             //等待滤波电容卸放干净电压稳定
  3.             delayus( 250);
  4.             //delayms( 1);

  5.             /*
  6.             关于放大部分
  7.             LM358 手册中典型值失调电压2~3mv  热电偶输出在此电压范围内时不能正常读取
  8.             ti手册中MIN TYP=3mv MAX=7mv
  9.             输出电压摆幅大(0至Vcc-1.5V)
  10.             */

  11.             temper = ReadTemperature();//读取温度值
复制代码
具体多久忘记了我的方法是固定采样温度的时间的例如100ms一个周期每间隔100ms读取一次温度加热与不加热都在这100ms内 所以大多数时候delayus是没啥意义的多数情况加热可能不到50ms

慢慢整呗反正都是兴趣所致


 楼主| 发表于 2014-12-16 09:24 | 显示全部楼层
goodcode 发表于 2014-12-15 23:36
一直没购置示波器有快两年没折腾到模拟电路了, 我那也跟金向维一样延迟很久再读取温度的.
PWM频率高了开 ...

我的PWM设定值已经够低的了.
大概15HZ...

感觉太低的话可能影响回温响应速度.

难道非要用笨办法?

想到一个更笨的办法,即:延迟一个周期的响应.
具体办法是:
在PWM产生更新中断后,不立即读ADC值,而是根据上一次读取的ADC值来计算该下一次的PWM值.
这个计算如果人为设计复杂些,可能就要数百uS了.

试试是否有效.


昨天晚上遇到个笨问题.用12V 加热T12时,ADC值 再慢慢加,然后关掉12V,用电脑的5V供电(MOS不再输出电压,因为5V接在7805末端),ADC突然上升了几十,然后再慢慢下降.
百思不得其解..
难道12V电源有纹波?示波器测LM358电源两端纹波好小好小.难道加热时地线有线阻?不应该啊,T12负极和输入负级是焊在一起的呢.
把STM8的手册看了一篇,仍没找到思路.

一觉醒来,突然发现好可笑,虽说电脑也是5V,78L05也是5V,但电脑通过导线传给MCU时就已经不是5V了,,STM8S103的 ADC参考电压和STC的一样,就是VDD.


 楼主| 发表于 2014-12-16 17:51 | 显示全部楼层
呃,又玩了一天,进展不多.

在计算电压时被IAR搞晕了.

    u32 tmp_32;
    tmp_32 = 1024*1000;

提示溢出...1024,1000 都是16位,相乘也是在32位中,怎么会溢出呢.??

可恶的是:
    tmp_32 = 102400*10;
又不提示溢出了.不是一样的么.

无奈,只有加个强制类型转换,,像这样:
   tmp_32 = (u32) 1024 *1000 ;


然后,,,

    vol_VDD = ( (u32) (1024 * 1250))  / ref_ADC1  ;
像这样的,又提示溢出...
(u32) 1024 * 1250   / ref_ADC1  ;
这样,不提示溢出了,又好像会算错,
试来试去,原来是这里不可以加括号:
    vol_VDD = ( (u32) 1024 * 1250 )  / ref_ADC1  ;

下午几小时就在折腾在这问题上了.
发表于 2014-12-16 22:47 | 显示全部楼层
加油!希望你早点成功。
 楼主| 发表于 2014-12-17 15:16 | 显示全部楼层
又是一天.

通过PWM 输出负时,检测 LM358输出的电压,与设定值比较,对PWM占空比进行修正.
又是傻办法..
  1.   if (vol_T12 < val_TempSet)
  2.   {
  3.     if ( val_TempSet - vol_T12 >50 )
  4.     {
  5.       if (val_PWM >150) val_PWM -=100;
  6.     }
  7.     else
  8.     {
  9.       if (val_PWM >100) val_PWM +=10;
  10.     }
  11.   }
  12.   else
  13.   {
  14.     {
  15.       if (val_PWM <8160) val_PWM +=100;
  16.     }
  17.   }
复制代码
通过串口发送的数据发现,很不妙.

在接近设定温度后,尽管占空比已经上升了,温度还是会有一段上升,上升的数值还比较大.
通过调整代码的数字虽然可以改进,可是,如果电源电压不固定,这个数值又会变.

看看goodcode的控制器,温度基本与设定值相差不过5....
灰心中....

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-29 22:28 , Processed in 0.058151 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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