搜索
bottom↓
回复: 15

随便做了个SPWM测试 分享代码和实测图形

[复制链接]

出0入0汤圆

发表于 2017-3-18 01:01:05 | 显示全部楼层 |阅读模式
http://www.amobbs.com/thread-5545884-1-1.html

今晚翻帖子看到这个,挺有兴趣。
顺便玩了一下SPWM。



硬件不是逆变器的硬件,而是随便拿以前的2015年的样品驱动器搭了个电感+电容,还是可以满足SPWM测试条件的。

PWM周期:20us
PWM频率:50khz
电压:24V左右

然后用了论坛的一个哥们的SPWM生成软件做了下数组,忘了是哪个帖子了。



主要代码如下:(STM32F103)

  1. #include "main.h"

  2. short table1000[1000] =
  3. {
  4. 0,8,16,25,33,41,49,57,65,73,
  5. 82,90,98,106,114,122,130,139,147,155,
  6. 163,171,179,187,195,203,211,219,228,236,
  7. 244,252,260,268,276,284,292,300,307,315,
  8. 323,331,339,347,355,363,371,378,386,394,
  9. 402,409,417,425,433,440,448,456,463,471,
  10. 479,486,494,501,509,516,524,531,539,546,
  11. 554,561,568,576,583,590,597,605,612,619,
  12. 626,633,641,648,655,662,669,676,683,690,
  13. 697,703,710,717,724,731,737,744,751,757,
  14. 764,771,777,784,790,797,803,810,816,822,
  15. 829,835,841,847,854,860,866,872,878,884,
  16. 890,896,902,908,913,919,925,931,936,942,
  17. 948,953,959,964,970,975,981,986,991,996,
  18. 1002,1007,1012,1017,1022,1027,1032,1037,1042,1047,
  19. 1052,1057,1061,1066,1071,1075,1080,1084,1089,1093,
  20. 1098,1102,1106,1111,1115,1119,1123,1127,1131,1135,
  21. 1139,1143,1147,1151,1155,1158,1162,1166,1169,1173,
  22. 1176,1180,1183,1186,1190,1193,1196,1199,1203,1206,
  23. 1209,1212,1215,1218,1220,1223,1226,1229,1231,1234,
  24. 1236,1239,1241,1244,1246,1248,1251,1253,1255,1257,
  25. 1259,1261,1263,1265,1267,1269,1270,1272,1274,1275,
  26. 1277,1278,1280,1281,1283,1284,1285,1286,1288,1289,
  27. 1290,1291,1292,1293,1293,1294,1295,1296,1296,1297,
  28. 1297,1298,1298,1299,1299,1299,1300,1300,1300,1300,
  29. 1300,1300,1300,1300,1300,1299,1299,1299,1298,1298,
  30. 1297,1297,1296,1296,1295,1294,1293,1293,1292,1291,
  31. 1290,1289,1288,1286,1285,1284,1283,1281,1280,1278,
  32. 1277,1275,1274,1272,1270,1269,1267,1265,1263,1261,
  33. 1259,1257,1255,1253,1251,1248,1246,1244,1241,1239,
  34. 1236,1234,1231,1229,1226,1223,1220,1218,1215,1212,
  35. 1209,1206,1203,1199,1196,1193,1190,1186,1183,1180,
  36. 1176,1173,1169,1166,1162,1158,1155,1151,1147,1143,
  37. 1139,1135,1131,1127,1123,1119,1115,1111,1106,1102,
  38. 1098,1093,1089,1084,1080,1075,1071,1066,1061,1057,
  39. 1052,1047,1042,1037,1032,1027,1022,1017,1012,1007,
  40. 1002,996,991,986,981,975,970,964,959,953,
  41. 948,942,936,931,925,919,913,908,902,896,
  42. 890,884,878,872,866,860,854,847,841,835,
  43. 829,822,816,810,803,797,790,784,777,771,
  44. 764,757,751,744,737,731,724,717,710,703,
  45. 697,690,683,676,669,662,655,648,641,633,
  46. 626,619,612,605,597,590,583,576,568,561,
  47. 554,546,539,531,524,516,509,501,494,486,
  48. 479,471,463,456,448,440,433,425,417,409,
  49. 402,394,386,378,371,363,355,347,339,331,
  50. 323,315,307,300,292,284,276,268,260,252,
  51. 244,236,228,219,211,203,195,187,179,171,
  52. 163,155,147,139,130,122,114,106,98,90,
  53. 82,73,65,57,49,41,33,25,16,8,
  54. 0,-8,-16,-25,-33,-41,-49,-57,-65,-73,
  55. -82,-90,-98,-106,-114,-122,-130,-139,-147,-155,
  56. -163,-171,-179,-187,-195,-203,-211,-219,-228,-236,
  57. -244,-252,-260,-268,-276,-284,-292,-300,-307,-315,
  58. -323,-331,-339,-347,-355,-363,-371,-378,-386,-394,
  59. -402,-409,-417,-425,-433,-440,-448,-456,-463,-471,
  60. -479,-486,-494,-501,-509,-516,-524,-531,-539,-546,
  61. -554,-561,-568,-576,-583,-590,-597,-605,-612,-619,
  62. -626,-633,-641,-648,-655,-662,-669,-676,-683,-690,
  63. -697,-703,-710,-717,-724,-731,-737,-744,-751,-757,
  64. -764,-771,-777,-784,-790,-797,-803,-810,-816,-822,
  65. -829,-835,-841,-847,-854,-860,-866,-872,-878,-884,
  66. -890,-896,-902,-908,-913,-919,-925,-931,-936,-942,
  67. -948,-953,-959,-964,-970,-975,-981,-986,-991,-996,
  68. -1002,-1007,-1012,-1017,-1022,-1027,-1032,-1037,-1042,-1047,
  69. -1052,-1057,-1061,-1066,-1071,-1075,-1080,-1084,-1089,-1093,
  70. -1098,-1102,-1106,-1111,-1115,-1119,-1123,-1127,-1131,-1135,
  71. -1139,-1143,-1147,-1151,-1155,-1158,-1162,-1166,-1169,-1173,
  72. -1176,-1180,-1183,-1186,-1190,-1193,-1196,-1199,-1203,-1206,
  73. -1209,-1212,-1215,-1218,-1220,-1223,-1226,-1229,-1231,-1234,
  74. -1236,-1239,-1241,-1244,-1246,-1248,-1251,-1253,-1255,-1257,
  75. -1259,-1261,-1263,-1265,-1267,-1269,-1270,-1272,-1274,-1275,
  76. -1277,-1278,-1280,-1281,-1283,-1284,-1285,-1286,-1288,-1289,
  77. -1290,-1291,-1292,-1293,-1293,-1294,-1295,-1296,-1296,-1297,
  78. -1297,-1298,-1298,-1299,-1299,-1299,-1300,-1300,-1300,-1300,
  79. -1300,-1300,-1300,-1300,-1300,-1299,-1299,-1299,-1298,-1298,
  80. -1297,-1297,-1296,-1296,-1295,-1294,-1293,-1293,-1292,-1291,
  81. -1290,-1289,-1288,-1286,-1285,-1284,-1283,-1281,-1280,-1278,
  82. -1277,-1275,-1274,-1272,-1270,-1269,-1267,-1265,-1263,-1261,
  83. -1259,-1257,-1255,-1253,-1251,-1248,-1246,-1244,-1241,-1239,
  84. -1236,-1234,-1231,-1229,-1226,-1223,-1220,-1218,-1215,-1212,
  85. -1209,-1206,-1203,-1199,-1196,-1193,-1190,-1186,-1183,-1180,
  86. -1176,-1173,-1169,-1166,-1162,-1158,-1155,-1151,-1147,-1143,
  87. -1139,-1135,-1131,-1127,-1123,-1119,-1115,-1111,-1106,-1102,
  88. -1098,-1093,-1089,-1084,-1080,-1075,-1071,-1066,-1061,-1057,
  89. -1052,-1047,-1042,-1037,-1032,-1027,-1022,-1017,-1012,-1007,
  90. -1002,-996,-991,-986,-981,-975,-970,-964,-959,-953,
  91. -948,-942,-936,-931,-925,-919,-913,-908,-902,-896,
  92. -890,-884,-878,-872,-866,-860,-854,-847,-841,-835,
  93. -829,-822,-816,-810,-803,-797,-790,-784,-777,-771,
  94. -764,-757,-751,-744,-737,-731,-724,-717,-710,-703,
  95. -697,-690,-683,-676,-669,-662,-655,-648,-641,-633,
  96. -626,-619,-612,-605,-597,-590,-583,-576,-568,-561,
  97. -554,-546,-539,-531,-524,-516,-509,-501,-494,-486,
  98. -479,-471,-463,-456,-448,-440,-433,-425,-417,-409,
  99. -402,-394,-386,-378,-371,-363,-355,-347,-339,-331,
  100. -323,-315,-307,-300,-292,-284,-276,-268,-260,-252,
  101. -244,-236,-228,-219,-211,-203,-195,-187,-179,-171,
  102. -163,-155,-147,-139,-130,-122,-114,-106,-98,-90,
  103. -82,-73,-65,-57,-49,-41,-33,-25,-16,-8
  104. };

  105. //PWM---TIM1_CH2(PA9)
  106. //PWM---TIM1_CH2N(PB14)

  107. //PWM---TIM1_CH3(PA10)
  108. //PWM---TIM1_CH3N(PB15)

  109. /*************************************************************************
  110.                               PWM init
  111. *************************************************************************/
  112. void PWM_Configuration(void)
  113. {
  114.         TIM_TimeBaseInitTypeDef  tim;
  115.         TIM_OCInitTypeDef        oc;
  116.     GPIO_InitTypeDef         gpio;
  117.     TIM_BDTRInitTypeDef      bdtr;
  118.     NVIC_InitTypeDef         nvic;
  119.    
  120.         RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_TIM1, ENABLE);       

  121.            gpio.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
  122.         gpio.GPIO_Mode = GPIO_Mode_AF_PP;
  123.         gpio.GPIO_Speed = GPIO_Speed_50MHz;
  124.         GPIO_Init(GPIOA, &gpio);

  125.            gpio.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15;
  126.         gpio.GPIO_Mode = GPIO_Mode_AF_PP;
  127.         gpio.GPIO_Speed = GPIO_Speed_50MHz;
  128.         GPIO_Init(GPIOB, &gpio);

  129.     tim.TIM_Period = 1440;   //72MHz   1440/72 = 20us
  130.         tim.TIM_Prescaler = 0;
  131.         tim.TIM_ClockDivision = TIM_CKD_DIV1;
  132.         tim.TIM_CounterMode = TIM_CounterMode_Up;
  133.         TIM_TimeBaseInit(TIM1, &tim);

  134.     bdtr.TIM_OSSRState = TIM_OSSRState_Disable;
  135.     bdtr.TIM_OSSIState = TIM_OSSIState_Disable;
  136.     bdtr.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
  137.     bdtr.TIM_DeadTime = 10;
  138.     bdtr.TIM_Break = TIM_Break_Disable;
  139.     bdtr.TIM_BreakPolarity = TIM_BreakPolarity_Low;
  140.     bdtr.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;
  141.     TIM_BDTRConfig(TIM1, &bdtr);

  142.     oc.TIM_OCMode = TIM_OCMode_PWM1;
  143.     oc.TIM_OutputState = TIM_OutputState_Enable;
  144.     oc.TIM_OutputNState = TIM_OutputNState_Enable;
  145.     oc.TIM_Pulse = 0;
  146.     oc.TIM_OCPolarity = TIM_OCPolarity_High;
  147.     oc.TIM_OCNPolarity = TIM_OCNPolarity_High;
  148.     oc.TIM_OCIdleState = TIM_OCIdleState_Reset;
  149.     oc.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
  150.     TIM_OC2Init(TIM1,&oc);
  151.     TIM_OC3Init(TIM1,&oc);
  152.    
  153.     nvic.NVIC_IRQChannel = TIM1_UP_IRQn;
  154.     nvic.NVIC_IRQChannelPreemptionPriority = 0;
  155.     nvic.NVIC_IRQChannelSubPriority = 0;
  156.     nvic.NVIC_IRQChannelCmd = ENABLE;
  157.     NVIC_Init(&nvic);
  158.    
  159.     TIM_ITConfig(TIM1, TIM_IT_Update,ENABLE);
  160.     TIM_ClearFlag(TIM1, TIM_FLAG_Update);
  161.    
  162.         TIM_ARRPreloadConfig(TIM1, ENABLE);
  163.    
  164.     TIM_CtrlPWMOutputs(TIM1,ENABLE);

  165.         TIM_Cmd(TIM1, ENABLE);
  166. }

  167. unsigned int irq_cnt = 0;

  168. void TIM1_UP_IRQHandler(void)
  169. {
  170.     unsigned int n = 0;
  171.    
  172.     if (TIM_GetITStatus(TIM1,TIM_IT_Update)!= RESET)
  173.     {
  174.         n = irq_cnt%1000;
  175.         
  176.         if(n<=500)
  177.         {
  178.             TIM1->CCR2 = abs(table1000[n]);
  179.             TIM1->CCR3 = 0;
  180.         }
  181.         else if(n>500)
  182.         {
  183.             TIM1->CCR3 = abs(table1000[n]);
  184.             TIM1->CCR2 = 0;
  185.         }

  186.         irq_cnt ++;
  187.         
  188.         LED_RED_TOGGLE();
  189.         TIM_ClearFlag(TIM1, TIM_FLAG_Update);
  190.     }
  191. }
复制代码


最终实测波形生成:


发现,jlink接着电脑,当示波器的夹子,夹到电感的输出端,就像是短路了似的,电源箱过流报警,JLINK自动从电脑断开。
然后把jlink从电脑拔掉,就不短路了。

另外,在上述正常情况的基础上,用示波器探头测量正弦波的时候,电源箱显示电流会变大25mA左右,断开示波器探头,就正常了。
不懂为何了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2017-3-18 01:26:50 | 显示全部楼层
深夜顶贴

出0入12汤圆

发表于 2017-3-18 10:57:44 | 显示全部楼层
厉害

出90入0汤圆

发表于 2017-3-18 11:25:13 | 显示全部楼层
jlink接着电脑,跟控制板是共地的,直接去测电感的输出端,就等于把电感的输出端和控制板的地短接了;示波器没接隔离变压器或者没使用隔离探头,示波器地线和电网地线是接在一起的,用示波器探头测量正弦波的时候,同样会把两个地方短接,有可能导致电流增加的问题。

出0入0汤圆

发表于 2017-3-19 21:54:14 | 显示全部楼层
输出端接个电容电感是用来低通滤波,相当于DA的么?

出0入300汤圆

发表于 2017-3-22 22:51:16 | 显示全部楼层
1000点有些少,10000点还可以

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2017-3-22 23:44:59 | 显示全部楼层
ibmx311 发表于 2017-3-22 22:51
1000点有些少,10000点还可以

你的这个幅值为何不同?

出0入300汤圆

发表于 2017-3-23 00:20:58 来自手机 | 显示全部楼层
两路都是可以恒压恒流并且相位可调的

出100入101汤圆

发表于 2017-3-23 07:08:13 | 显示全部楼层
高手,高深!

出0入399汤圆

发表于 2017-3-23 08:58:22 | 显示全部楼层
示波器接大地的探头测量时,当探头地不和电路地相连时测量波形,电流会增加,而且有时候导致波形不正常会有异响。我之前就发现过。 我当时测过好几个DCDC,输入是有菊水电源供电。后来就用手持示波器测量电流不会增加。分析虽然菊水电源输出是隔离的,但是示波器的地测量点是高频信号,可能通过Y电容或者寄生电容形成回路了。

出0入300汤圆

发表于 2017-3-23 11:56:02 来自手机 | 显示全部楼层
我所有的桌面仪器都会有一个隔离变压器

出0入76汤圆

发表于 2017-3-23 13:05:58 | 显示全部楼层
本帖最后由 foxpro2005 于 2017-3-23 13:11 编辑

做得不错。。。   再给点建议:
对你前面说的问题, 玩逆变, 在调试或仿真时, 以及测试, 一定要注意的!
电脑(下载器 或 通信接口)、电源、 示波器等,  别以为它们都叫GND, 而把它们直接连在一起, 是会出问题的(有时还有可能出大问题!!)。
1) 因为这些的GND(地), 是不对等的(不是相同的电气回路)!  我们在调试或测量时, 一般都采取供电隔离的方式, 也就是使用1:1的隔离变压器, 把各自的市电供电电源隔开(使其独立)。
2) 示波器的话,供电可以使用隔离变压器, 也可以将电源线插头接地脚 扳掉, 还可以使用差分探头。

出0入0汤圆

发表于 2017-4-17 18:44:55 | 显示全部楼层
mark SPWM 实验测试带数据

出0入0汤圆

发表于 2018-5-6 08:29:36 | 显示全部楼层
高手!!

出0入0汤圆

发表于 2018-5-6 09:41:33 来自手机 | 显示全部楼层
这是开环的吧?

出0入0汤圆

发表于 2019-1-22 20:11:02 | 显示全部楼层
谢谢,学习!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 16:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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