发新帖本帖赏金 15.00元(功能说明)我要提问
返回列表
打印
[51单片机]

回忆N年前玩电时代的美好时光----硬件篇【独创+连载】

[复制链接]
楼主: laoxu
手机看帖
扫描二维码
随时随地手机跟帖
21
请老湿开讲!:victory:

使用特权

评论回复
22
大秦正声| | 2015-12-21 09:02 | 只看该作者
关注

使用特权

评论回复
23
tianhaolan| | 2015-12-21 09:06 | 只看该作者
三十几年了,楼主今年多大?

使用特权

评论回复
24
crazyren| | 2015-12-21 09:08 | 只看该作者
楼主现在脱离一线研发了?

使用特权

评论回复
25
hyl1615| | 2015-12-21 09:13 | 只看该作者
怎么没下文了?

使用特权

评论回复
26
penguin008| | 2015-12-21 09:37 | 只看该作者
干货来啦?搬小马扎过来围观啦~

使用特权

评论回复
27
Meyeah| | 2015-12-21 10:09 | 只看该作者
听大哥讲故事

使用特权

评论回复
28
ayl439| | 2015-12-21 11:39 | 只看该作者
坐等~楼主最近很活跃啊?终于有闲了?

使用特权

评论回复
29
aeromoon| | 2015-12-21 12:34 | 只看该作者
躺着听,趴着听,坐着听,站着听

使用特权

评论回复
30
冰零分子| | 2015-12-21 12:48 | 只看该作者
我是来捧场的

使用特权

评论回复
31
laoxu|  楼主 | 2015-12-21 13:12 | 只看该作者
tianhaolan 发表于 2015-12-21 09:06
三十几年了,楼主今年多大?

五十几了。

使用特权

评论回复
32
laoxu|  楼主 | 2015-12-21 13:13 | 只看该作者

哪儿那么快啊?

还要干活赚钱养家糊口呢~~~ :lol

使用特权

评论回复
33
laoxu|  楼主 | 2015-12-21 13:16 | 只看该作者
crazyren 发表于 2015-12-21 09:08
楼主现在脱离一线研发了?

早就脱离第一线了~~~

现专职打杂,外协没法干的,或干不了的事自已做。:lol

使用特权

评论回复
34
laoxu|  楼主 | 2015-12-21 13:23 | 只看该作者
ayl439 发表于 2015-12-21 11:39
坐等~楼主最近很活跃啊?终于有闲了?

还是很忙~~~

这次21ic上海聚会,俺是唯一的迟到者,真不好意思,让大家久等了。

21ic的高总想请我搞点DIY活动,匠人把老T叔的PM2.5检测仪说事,俺确实很忙,但几个头儿都开口了,总要给个面子,贡献的独特的东西出来~~~ :lol

使用特权

评论回复
评论
21ic小喇叭 2015-12-22 14:08 回复TA
很赞哦 
35
zxuej| | 2015-12-21 22:36 | 只看该作者
听大哥讲故事。

使用特权

评论回复
36
laoxu|  楼主 | 2015-12-22 07:03 | 只看该作者
本帖最后由 laoxu 于 2015-12-22 07:19 编辑

A/B相正交计数,硬件设计要点:

设定T0,T1为模式1,16位计数器, 并且使能INT0,INT1门控计数(高电平有效)

输入的A/B相正交信号,A相直接送 T0门控(INT0)和 T1门控(INT1)。B相分两路,一路直接送 T0计数, 另一路经三极管反相后,送 T1计数。这样,能保证在 A相输入高电平时,B相电平由高至低变化时,T0计数;B相电平由低至高变化时,T1计数;从而使得计数相位同相,保证加、减计数的准确性, 实际测量计数值 = T0 -T1 。

使用特权

评论回复
37
laoxu|  楼主 | 2015-12-22 07:18 | 只看该作者
A/B相正交计数,软件设计要点:

定时中断,读入T0,T1值,相减后得到 硬件A/B相正交信号计数值,再用软件插值法,查表求得一个脉冲周期之中的具体位置(偏移量)。

在主程序中,将计数值左移两位,加上偏移量,即得到四细分后的具体数值。


程序片断如下:

void time2(void) interrupt 5  using 1   // 定时器中断2, 中断定时时间500us,晶振频率16.6MHz/N   
{ static unsigned char posit=0;
  static unsigned int  LED_time_off=0;
  static unsigned char T0_count=0;      // 光栅编码器T0计数   
  static unsigned char T1_count=0;      // 光栅编码器T1计数   
  static unsigned char T0_count_bak=0;  // 光栅编码器T0计数上一状态备份   
  static unsigned char T1_count_bak=0;  // 光栅编码器T1计数上一状态备份   
  unsigned char a;
  unsigned char b;
   
    //-------- 读入T0、T1值,光栅编码器硬件计数 --------//
  T0_count = TL0;                                      // 读入T0值
  T1_count = TL1;                                      // 读入T1值
  a = (uint8)T0_count - (uint8)T0_count_bak;
  b = (uint8)T1_count - (uint8)T1_count_bak;
  Int_T_count += (a - b);             // 光栅编码器硬件计数
  T0_count_bak = T0_count;                         // 备份T0值
  T1_count_bak = T1_count;                         // 备份T1值

    //------------ 光栅编码器软件4细分 ------------//
  input_comp |= P3 & 0x03;               // 输入A、B相正交信号
  a = tab_counter[input_comp];      // 光栅编码器4细分当前位置
  if (a != 0x80)
    { Int_Offset = a;
        }
  input_comp <<= 2;
  input_comp  &= 0x0c;                                // 保存A、B相正交信号状态

    //-------- 动态扫描显示及键值输入 --------//
  
  ........

}

使用特权

评论回复

打赏榜单

21ic小喇叭 打赏了 5.00 元 2015-12-22

38
tianhaolan| | 2015-12-22 14:24 | 只看该作者
laoxu 发表于 2015-12-22 07:18
A/B相正交计数,软件设计要点:

定时中断,读入T0,T1值,相减后得到 硬件A/B相正交信号计数值,再用软件插 ...

好东西,大体明白了,要想完全了然于胸,还是需要自己实际运用。

使用特权

评论回复
39
tianhaolan| | 2015-12-22 14:28 | 只看该作者
赞一个

使用特权

评论回复
40
laoxu|  楼主 | 2015-12-23 08:56 | 只看该作者
DIY-4细分_SH89F52  源程序打包下载, Keil  C 格式





DIY-4细分_SH89F52.rar (89.74 KB)




======================= 全文连载完 =======================

使用特权

评论回复
发新帖 本帖赏金 15.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则