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

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

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

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

9 _! ]7 y# t. I1 I% `# j$ t
原理图(提供PDF):
640 (2).png

( ^' i5 E+ J1 `/ E
模块底板原理图(提供PDF):
640 (1).png

& R8 S3 Y2 X( h" {
. I$ p! t( s6 _
PCB(提供PDF):
640.png

) A1 D4 a& z) v' V/ Z

6 v" `& }; r- g+ ^7 S
模块底板PCBS(提供PDF):

8 `3 W" }' @3 ~8 ^! @
0DTQOT{7Z%_((6IFE_1JW$K.png

+ L. T; {9 V. L7 }4 d
源程序(提供源文件):
640.jpg

! N& \7 J/ {. o% f6 \; @以下为部分程序,完整程序可在下载链接获取:
  1. int main(void)( n7 K: s/ f+ h1 @) t! G" v
  2. {. m' o- E/ K5 x$ n" |
  3.   SCB->VTOR = FLASH_BASE; ' i( Z5 T/ R& x1 V6 b5 v5 q, l
  4.   System_Init();                                                                                     //底层初始化  
    1 {$ @, G- m( m* x3 b
  5.   OSInit();                                                         //UCOSII初始化+ r5 R& S" K- ?8 k0 \8 C
  6.   OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO);    //创建开始任务$ a* j# N& k+ }% z, v% e
  7. 1 _/ g, ^6 T& V: P& X9 Z
  8.   OSStart();                                                                                         //启动UCOSII多任务管理         
    ! W2 v. s8 L4 l- ]  M
  9. }
    $ z4 j0 g% v; j  F
  10. /***************************************************************************/
    7 Z  C# _% c/ P2 L1 Z2 L+ D1 X
  11. //*******函数名:start_task()
    7 q! X& O: ^& b, Y9 B$ A: A
  12. //*******说  明:起始函数+ N) ^2 A$ G: H4 D" k7 ~  o5 p5 ^9 U
  13. //*******参  数:UCOSII函数入口; a; s" v7 G: l, R* V  u
  14. //*******返回值:无返回* x+ b3 Q( p6 O! }5 J, J* O
  15. /***************************************************************************/! o. l7 d' X; F
  16. void start_task(void *pdata)
    , X4 k  c' L6 Y1 G5 Y
  17. {
    4 P9 j1 b8 j& t7 U( N0 {
  18.   OS_CPU_SR cpu_sr=0;
    ' R8 A$ p1 f) }4 D) J" [
  19.   pdata=pdata;
    : k' S9 S5 F% Z
  20.   sem_rtc =OSSemCreate(0);                                                  //创建一个信号量用于RTC时钟* l/ d8 b( t) {$ C
  21.   OSStatInit();                                                    //初始化统计任务
    1 Y0 l  C# s% V5 e; Y* c
  22.   OS_ENTER_CRITICAL();                                               //进入临界区
    9 O: H& W4 d8 d( @
  23.   1 p. A' \) C- i
  24.   OSTaskCreate(main_task,(void *)0,(OS_STK *)&MAIN_TASK_STK[MAIN_STK_SIZE-1],MAIN_TASK_PRIO);              //创建主任务$ v1 q3 d5 W" k; B6 F5 X: ]; x! k. q
  25. //  OSTaskCreate(rtc_task,(void *)0,(OS_STK *)&RTC_TASK_STK[RTC_STK_SIZE-1],RTC_TASK_PRIO);                  //创建RTC任务
    - y& E( m  ^2 i9 s
  26.   OSTaskSuspend(START_TASK_PRIO);                                           //挂起起始任务
    + Q1 R$ p8 m4 P9 O" H
  27.   OS_EXIT_CRITICAL();                                                 //退出临界区% x! [8 M; |1 l7 ?
  28. }# J9 Z8 ?% ~2 J$ Z- G
  29. : w/ c! r( T; U* {
  30. 7 C3 Y2 ~, X; }7 R( N
  31. /***************************************************************************/
    ! {/ Z0 m( M0 `& K* `  J  D
  32. //*******函数名:main_task()
    % x! w/ \, V- L
  33. //*******说  明:UCOSII主函数,处理杂事
    - I5 Z$ m0 C3 A  a, C! s; o
  34. //*******参  数:无参数
    % I0 a# S* c/ u, w$ [( S9 G
  35. //*******返回值:无返回
    ) b+ o0 a- a  x5 s" c/ ?! q
  36. /***************************************************************************/
    4 M1 P" \* y5 M3 O2 R
  37. void main_task(void *pdata)
    5 B, J# K" W- w' {6 g7 D- w
  38. {
    , V* m4 z) ]) u$ b9 l! ]5 s1 x2 S8 }
  39.   while(1)) m( q. [# e2 x2 |) R( X
  40.   {   , Z1 Q  q+ \; g
  41.       DisposeKey();                                                                                           //读取按键
    % F9 r+ x+ [& t% o
  42. , Z' C& S4 T# L( t8 B
  43.       key_scan();                                                                                             //按键扫描处理$ Q* C. {! |* ~) z7 U" W6 H
  44.         
    6 L0 N4 @9 R) ?7 B1 `+ \5 r$ }
  45.     if(TimingMark == 10)                                            //500ms定时标志位
    : |4 K/ q& [3 O8 B8 M# d7 J1 `: O
  46.     {1 N& D0 x/ e$ x5 M2 i! L
  47.       TimingMark=0;( q! J. U: F5 X- j# d4 o
  48.          
    3 z: Z  A( [2 e# n  e; h9 t
  49.          ReadAmmeterData();                              //读取内部电表数据
    . |3 T2 b( M4 E- {. M
  50.          ( Q% l3 A6 i4 Y. Z7 B
  51.          UpdateLcdMark = 1;         
    ; P) Q* w( C/ Q; `
  52.     }
    % p, t' p- `  Q# U+ ~! N7 R
  53.       
    2 j: C3 n3 ~5 X# s/ u! a: L! c; e
  54.       if(UpdateLcdMark == 1)                                              //判断是否要更新数据/ Y$ l  j; k( S. ]" X0 y  t# @
  55.       {# x3 N8 S6 p2 d9 d# N4 P

  56. 2 {4 |0 X8 T, I8 R3 P& ~0 s; `! F; x
  57.          clear_screen();                                            //清屏2 S9 T' _/ t( S9 R- r& i

  58. ) L& U) `) {2 V$ _7 z
  59.          Display_lcd();                                                            //更新显示数据  0 {- ?9 W( ^8 K5 o2 z8 f3 I% L
  60.          
    1 V0 Z8 p% R; J3 Q( c! d
  61.          UpdateLcdMark = 0;
    , x& a" m% ]# L' {  ~& |7 Q3 }
  62.       }
    + V! r( m: e) i: g, p( p" b, c
  63. , k' p5 n* i5 l$ K! G  E
  64.     " L! g; q( L5 }( r8 r3 {
  65.   }2 z8 k" J0 E" g1 y4 u7 n
  66.   $ y  R0 A5 |6 Y
  67. }
复制代码
( U/ r( w+ R( n5 e% J3 m
赞 收藏 评论0 发布时间:2022-5-30 10:53

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版