你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32与ATT7022E多功能电力监测仪

[复制链接]
STMCU小助手 发布时间:2022-5-30 10:53
本设计:
基于STM32与ATT7022E多功能电力监测仪的电路方案设计
程序编译器:keil 5
编程语言:C语言
编号C0016

  近年来随着我国国民经济的高速发展,先进嵌入式处理器技术、微电子技术及测控技术也得到了快速发展  ,为了适应新形势的发展和需求,政府对智能电网的不断推进,对电力监测仪的实时性、可靠性、精确性,提出了更高的要求。
  传统电力监测仪广泛采用AD+MCU模式,即外部模数A/D转换芯片与8位、 16位单片机进行对三相电网数据进行采集,存在许多的弊端,如芯片功能单一,需要进行外围扩展诸多器件,软件程序算法复杂,测量精度不高等问题。而以DSP+MCU双CPU模式,很好的解决了复杂数据的处理问题,但存在开发成本过高,且造成MCU资源的一定浪费;本系统通过采用高性能 32位ARMCortex-M3内核为处理器STM32F103ZE作为主控芯片与多功能高精度的三相电能专用计量芯片ATT7022E ,使系统整体硬件的设计更加简洁,与以往电力监测仪系统处理性能力得到明显提高,同时也降低程序算法复杂度。


原理图(提供PDF):
640 (2).png

模块底板原理图(提供PDF):
640 (1).png


PCB(提供PDF):
640.png


模块底板PCBS(提供PDF):

0DTQOT{7Z%_((6IFE_1JW$K.png

源程序(提供源文件):
640.jpg

以下为部分程序,完整程序可在下载链接获取:
  1. int main(void)
  2. {
  3.   SCB->VTOR = FLASH_BASE;
  4.   System_Init();                                                                                     //底层初始化  
  5.   OSInit();                                                         //UCOSII初始化
  6.   OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO);    //创建开始任务

  7.   OSStart();                                                                                         //启动UCOSII多任务管理         
  8. }
  9. /***************************************************************************/
  10. //*******函数名:start_task()
  11. //*******说  明:起始函数
  12. //*******参  数:UCOSII函数入口
  13. //*******返回值:无返回
  14. /***************************************************************************/
  15. void start_task(void *pdata)
  16. {
  17.   OS_CPU_SR cpu_sr=0;
  18.   pdata=pdata;
  19.   sem_rtc =OSSemCreate(0);                                                  //创建一个信号量用于RTC时钟
  20.   OSStatInit();                                                    //初始化统计任务
  21.   OS_ENTER_CRITICAL();                                               //进入临界区
  22.   
  23.   OSTaskCreate(main_task,(void *)0,(OS_STK *)&MAIN_TASK_STK[MAIN_STK_SIZE-1],MAIN_TASK_PRIO);              //创建主任务
  24. //  OSTaskCreate(rtc_task,(void *)0,(OS_STK *)&RTC_TASK_STK[RTC_STK_SIZE-1],RTC_TASK_PRIO);                  //创建RTC任务
  25.   OSTaskSuspend(START_TASK_PRIO);                                           //挂起起始任务
  26.   OS_EXIT_CRITICAL();                                                 //退出临界区
  27. }


  28. /***************************************************************************/
  29. //*******函数名:main_task()
  30. //*******说  明:UCOSII主函数,处理杂事
  31. //*******参  数:无参数
  32. //*******返回值:无返回
  33. /***************************************************************************/
  34. void main_task(void *pdata)
  35. {
  36.   while(1)
  37.   {   
  38.       DisposeKey();                                                                                           //读取按键

  39.       key_scan();                                                                                             //按键扫描处理
  40.         
  41.     if(TimingMark == 10)                                            //500ms定时标志位
  42.     {
  43.       TimingMark=0;
  44.          
  45.          ReadAmmeterData();                              //读取内部电表数据
  46.          
  47.          UpdateLcdMark = 1;         
  48.     }
  49.       
  50.       if(UpdateLcdMark == 1)                                              //判断是否要更新数据
  51.       {

  52.          clear_screen();                                            //清屏

  53.          Display_lcd();                                                            //更新显示数据  
  54.          
  55.          UpdateLcdMark = 0;
  56.       }

  57.    
  58.   }
  59.   
  60. }
复制代码

收藏 评论0 发布时间:2022-5-30 10:53

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版