找回密码
 立即注册

QQ登录

只需一步,快速开始

开启左侧

[M051] 请注意新唐M051可不是简单的51,是完美的M0单片机

[复制链接]
harvardx 发表于 2016-7-17 23:53:49 | 显示全部楼层 |阅读模式
本帖最后由 harvardx 于 2016-7-18 00:10 编辑

      新唐M051系列是非常出色的给力芯,用了很久, 做了很多产品, 一直觉得他是8位机的不错继任者, 于字面,我们通常认为是用来可以取代兼容8051的M0单片机. 在ARM cortex M里面应该算是比较弱的, 但是这仅仅是相对而已 ,对于8bit 16bit mcu ,新唐M051有着很多拿手绝活, 只可惜,一直沉睡在我的应用中. 没有发掘出来. 也是, 我的初衷就是用它来替代8位机, 更快更稳更便宜好用,我为啥还要坚守8bit呢,
     第一步我已经迈出,并且付诸实践很多, 但是第二部,现在看来, 我才刚刚开始. 这不, 现在有这个一个需求,需要测量交流AC回路的频率,有50hz 60hz 一直600hz.
3`C4SUHRJ]I6(H6]DDB4_)I.png

如图 所示,此电路可以产生比较好的方波, 在示波器上可以轻松的识别到正确的频率和脉宽,形状, 但是我用P20的引脚中断功能来做的时候, 无论是上升沿还是下降沿,都存在误触发的可能.



                            L[T64B15Z%H[Z{8{5C~K]@0.png

再用示波器仔细查看,原来是进入单片机的信号存在这样的中间状态,导致,误触发.

导致我对该端口的边沿中断的计数采集发生比较大的误差,尤其是50 60hz]的时候,居然会变成正常频率的2倍左右. 问题很大..



那么问题来了 肿么办, 加电容么?  幸好M0516提供了强大的debouce功能. 简言之就是防止端口上信号反弹的功能 , 你反弹了 我不采集你就可以了嘛. 我采样的时间间隔可根据现场和信号的特点进行变化. ,

ZT5SKCZYDVK{QI`_60SVK0K.png

    发现这个好东西以后就立即想用起来. 老规矩 不管三七二十一,打开bsp里面的samplecode,然打开有个例程是SampleCode\StdDriver\GPIO_EINTAndDebounce

打开这个功能.很容易就找到了相关的配置, 移植到自己的工程,

  1. void KMF600_init_freqpin( void )
  2. {
  3.     SYS_UnlockReg();
  4.    
  5.     /* 设置P20为外部输入中断 */
  6.     GPIO_SetMode(P2, BIT0, GPIO_PMD_INPUT);
  7.     GPIO_EnableInt(P2, 0, GPIO_INT_RISING);
  8.     NVIC_EnableIRQ(GPIO_P2P3P4_IRQn);
  9.    
  10.     /*  使能debouce功能,并且选择边沿中断采样的时钟源和采样间隔
  11.     *   此处为内部10K,间隔为4,那么采样的时钟最小时间为10K频率对应的周期,为1/10000s
  12.     *   也就是100us,间隔设置为4,那么间隔时间就是400us,如此设置以后,明显频率采集变准了
  13.     */
  14.     GPIO_SET_DEBOUNCE_TIME(GPIO_DBCLKSRC_LIRC, GPIO_DBCLKSEL_4);
  15.     GPIO_ENABLE_DEBOUNCE(P2, BIT0 );

  16.     SYS_LockReg();
  17. }
复制代码

运行的情况:

5%{I4NU1_$P{H2AL3U Y0GKS@8JAH2GRV~0`~IFZ9E.png FB7B0J{]W2N)L~)N}6]]$P9.png Y)H86JSB1{UCJV4U{597J$W.png NZ)UM`%T0O`TQLX{14BKLNK.png O@CJ8]6Z`WD$T]}RY1PRX%4.png





   大赞一下 ,debouce, 以后有类似的同步脉冲中断神马的,记得要开启,很管用.


  
5%{I4NU1_$P{H2AL3U
Y0GKS@8JAH2GRV~0`~IFZ9E.png
回复

使用道具 举报

wwzgch2015 发表于 2016-7-18 09:38:21 | 显示全部楼层
学习了
回复

使用道具 举报

slotg 发表于 2016-7-18 10:12:06 | 显示全部楼层
很好的经验帖,一定要顶。
回复 支持 反对

使用道具 举报

 楼主| harvardx 发表于 2016-7-18 22:02:40 | 显示全部楼层
debounce 确实是个好东西 大家有空留意下
回复 支持 反对

使用道具 举报

ToDo 发表于 2016-7-21 16:37:16 | 显示全部楼层
不錯。
感覺台灣的MCU都很有特色,經常會在MCU裡面添加一些很實用的功能,在某些場合確實非常的有用。
回复 支持 反对

使用道具 举报

 楼主| harvardx 发表于 2016-7-21 20:42:25 | 显示全部楼层
还是真是 以前也用了个51  也有类似功能 没觉得 ,这次用新唐, 发现咱也有 就引起重视了 刚好也是遇到问题. 然后依照samplecode里面的例程 稍微设置了 debounce的时钟和时间 ,就迎刃而解了
回复 支持 反对

使用道具 举报

 楼主| harvardx 发表于 2016-7-29 12:53:07 | 显示全部楼层
应该是可以的 这是针对io的数字输入输出功能的. TIM应该是其中一种
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU