http://www.amobbs.com/thread-5545884-1-1.html
今晚翻帖子看到这个,挺有兴趣。
顺便玩了一下SPWM。
硬件不是逆变器的硬件,而是随便拿以前的2015年的样品驱动器搭了个电感+电容,还是可以满足SPWM测试条件的。
PWM周期:20us
PWM频率:50khz
电压:24V左右
然后用了论坛的一个哥们的SPWM生成软件做了下数组,忘了是哪个帖子了。
主要代码如下:(STM32F103)
- #include "main.h"
- short table1000[1000] =
- {
- 0,8,16,25,33,41,49,57,65,73,
- 82,90,98,106,114,122,130,139,147,155,
- 163,171,179,187,195,203,211,219,228,236,
- 244,252,260,268,276,284,292,300,307,315,
- 323,331,339,347,355,363,371,378,386,394,
- 402,409,417,425,433,440,448,456,463,471,
- 479,486,494,501,509,516,524,531,539,546,
- 554,561,568,576,583,590,597,605,612,619,
- 626,633,641,648,655,662,669,676,683,690,
- 697,703,710,717,724,731,737,744,751,757,
- 764,771,777,784,790,797,803,810,816,822,
- 829,835,841,847,854,860,866,872,878,884,
- 890,896,902,908,913,919,925,931,936,942,
- 948,953,959,964,970,975,981,986,991,996,
- 1002,1007,1012,1017,1022,1027,1032,1037,1042,1047,
- 1052,1057,1061,1066,1071,1075,1080,1084,1089,1093,
- 1098,1102,1106,1111,1115,1119,1123,1127,1131,1135,
- 1139,1143,1147,1151,1155,1158,1162,1166,1169,1173,
- 1176,1180,1183,1186,1190,1193,1196,1199,1203,1206,
- 1209,1212,1215,1218,1220,1223,1226,1229,1231,1234,
- 1236,1239,1241,1244,1246,1248,1251,1253,1255,1257,
- 1259,1261,1263,1265,1267,1269,1270,1272,1274,1275,
- 1277,1278,1280,1281,1283,1284,1285,1286,1288,1289,
- 1290,1291,1292,1293,1293,1294,1295,1296,1296,1297,
- 1297,1298,1298,1299,1299,1299,1300,1300,1300,1300,
- 1300,1300,1300,1300,1300,1299,1299,1299,1298,1298,
- 1297,1297,1296,1296,1295,1294,1293,1293,1292,1291,
- 1290,1289,1288,1286,1285,1284,1283,1281,1280,1278,
- 1277,1275,1274,1272,1270,1269,1267,1265,1263,1261,
- 1259,1257,1255,1253,1251,1248,1246,1244,1241,1239,
- 1236,1234,1231,1229,1226,1223,1220,1218,1215,1212,
- 1209,1206,1203,1199,1196,1193,1190,1186,1183,1180,
- 1176,1173,1169,1166,1162,1158,1155,1151,1147,1143,
- 1139,1135,1131,1127,1123,1119,1115,1111,1106,1102,
- 1098,1093,1089,1084,1080,1075,1071,1066,1061,1057,
- 1052,1047,1042,1037,1032,1027,1022,1017,1012,1007,
- 1002,996,991,986,981,975,970,964,959,953,
- 948,942,936,931,925,919,913,908,902,896,
- 890,884,878,872,866,860,854,847,841,835,
- 829,822,816,810,803,797,790,784,777,771,
- 764,757,751,744,737,731,724,717,710,703,
- 697,690,683,676,669,662,655,648,641,633,
- 626,619,612,605,597,590,583,576,568,561,
- 554,546,539,531,524,516,509,501,494,486,
- 479,471,463,456,448,440,433,425,417,409,
- 402,394,386,378,371,363,355,347,339,331,
- 323,315,307,300,292,284,276,268,260,252,
- 244,236,228,219,211,203,195,187,179,171,
- 163,155,147,139,130,122,114,106,98,90,
- 82,73,65,57,49,41,33,25,16,8,
- 0,-8,-16,-25,-33,-41,-49,-57,-65,-73,
- -82,-90,-98,-106,-114,-122,-130,-139,-147,-155,
- -163,-171,-179,-187,-195,-203,-211,-219,-228,-236,
- -244,-252,-260,-268,-276,-284,-292,-300,-307,-315,
- -323,-331,-339,-347,-355,-363,-371,-378,-386,-394,
- -402,-409,-417,-425,-433,-440,-448,-456,-463,-471,
- -479,-486,-494,-501,-509,-516,-524,-531,-539,-546,
- -554,-561,-568,-576,-583,-590,-597,-605,-612,-619,
- -626,-633,-641,-648,-655,-662,-669,-676,-683,-690,
- -697,-703,-710,-717,-724,-731,-737,-744,-751,-757,
- -764,-771,-777,-784,-790,-797,-803,-810,-816,-822,
- -829,-835,-841,-847,-854,-860,-866,-872,-878,-884,
- -890,-896,-902,-908,-913,-919,-925,-931,-936,-942,
- -948,-953,-959,-964,-970,-975,-981,-986,-991,-996,
- -1002,-1007,-1012,-1017,-1022,-1027,-1032,-1037,-1042,-1047,
- -1052,-1057,-1061,-1066,-1071,-1075,-1080,-1084,-1089,-1093,
- -1098,-1102,-1106,-1111,-1115,-1119,-1123,-1127,-1131,-1135,
- -1139,-1143,-1147,-1151,-1155,-1158,-1162,-1166,-1169,-1173,
- -1176,-1180,-1183,-1186,-1190,-1193,-1196,-1199,-1203,-1206,
- -1209,-1212,-1215,-1218,-1220,-1223,-1226,-1229,-1231,-1234,
- -1236,-1239,-1241,-1244,-1246,-1248,-1251,-1253,-1255,-1257,
- -1259,-1261,-1263,-1265,-1267,-1269,-1270,-1272,-1274,-1275,
- -1277,-1278,-1280,-1281,-1283,-1284,-1285,-1286,-1288,-1289,
- -1290,-1291,-1292,-1293,-1293,-1294,-1295,-1296,-1296,-1297,
- -1297,-1298,-1298,-1299,-1299,-1299,-1300,-1300,-1300,-1300,
- -1300,-1300,-1300,-1300,-1300,-1299,-1299,-1299,-1298,-1298,
- -1297,-1297,-1296,-1296,-1295,-1294,-1293,-1293,-1292,-1291,
- -1290,-1289,-1288,-1286,-1285,-1284,-1283,-1281,-1280,-1278,
- -1277,-1275,-1274,-1272,-1270,-1269,-1267,-1265,-1263,-1261,
- -1259,-1257,-1255,-1253,-1251,-1248,-1246,-1244,-1241,-1239,
- -1236,-1234,-1231,-1229,-1226,-1223,-1220,-1218,-1215,-1212,
- -1209,-1206,-1203,-1199,-1196,-1193,-1190,-1186,-1183,-1180,
- -1176,-1173,-1169,-1166,-1162,-1158,-1155,-1151,-1147,-1143,
- -1139,-1135,-1131,-1127,-1123,-1119,-1115,-1111,-1106,-1102,
- -1098,-1093,-1089,-1084,-1080,-1075,-1071,-1066,-1061,-1057,
- -1052,-1047,-1042,-1037,-1032,-1027,-1022,-1017,-1012,-1007,
- -1002,-996,-991,-986,-981,-975,-970,-964,-959,-953,
- -948,-942,-936,-931,-925,-919,-913,-908,-902,-896,
- -890,-884,-878,-872,-866,-860,-854,-847,-841,-835,
- -829,-822,-816,-810,-803,-797,-790,-784,-777,-771,
- -764,-757,-751,-744,-737,-731,-724,-717,-710,-703,
- -697,-690,-683,-676,-669,-662,-655,-648,-641,-633,
- -626,-619,-612,-605,-597,-590,-583,-576,-568,-561,
- -554,-546,-539,-531,-524,-516,-509,-501,-494,-486,
- -479,-471,-463,-456,-448,-440,-433,-425,-417,-409,
- -402,-394,-386,-378,-371,-363,-355,-347,-339,-331,
- -323,-315,-307,-300,-292,-284,-276,-268,-260,-252,
- -244,-236,-228,-219,-211,-203,-195,-187,-179,-171,
- -163,-155,-147,-139,-130,-122,-114,-106,-98,-90,
- -82,-73,-65,-57,-49,-41,-33,-25,-16,-8
- };
- //PWM---TIM1_CH2(PA9)
- //PWM---TIM1_CH2N(PB14)
- //PWM---TIM1_CH3(PA10)
- //PWM---TIM1_CH3N(PB15)
- /*************************************************************************
- PWM init
- *************************************************************************/
- void PWM_Configuration(void)
- {
- TIM_TimeBaseInitTypeDef tim;
- TIM_OCInitTypeDef oc;
- GPIO_InitTypeDef gpio;
- TIM_BDTRInitTypeDef bdtr;
- NVIC_InitTypeDef nvic;
-
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_TIM1, ENABLE);
- gpio.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
- gpio.GPIO_Mode = GPIO_Mode_AF_PP;
- gpio.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &gpio);
- gpio.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15;
- gpio.GPIO_Mode = GPIO_Mode_AF_PP;
- gpio.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &gpio);
- tim.TIM_Period = 1440; //72MHz 1440/72 = 20us
- tim.TIM_Prescaler = 0;
- tim.TIM_ClockDivision = TIM_CKD_DIV1;
- tim.TIM_CounterMode = TIM_CounterMode_Up;
- TIM_TimeBaseInit(TIM1, &tim);
- bdtr.TIM_OSSRState = TIM_OSSRState_Disable;
- bdtr.TIM_OSSIState = TIM_OSSIState_Disable;
- bdtr.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
- bdtr.TIM_DeadTime = 10;
- bdtr.TIM_Break = TIM_Break_Disable;
- bdtr.TIM_BreakPolarity = TIM_BreakPolarity_Low;
- bdtr.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;
- TIM_BDTRConfig(TIM1, &bdtr);
- oc.TIM_OCMode = TIM_OCMode_PWM1;
- oc.TIM_OutputState = TIM_OutputState_Enable;
- oc.TIM_OutputNState = TIM_OutputNState_Enable;
- oc.TIM_Pulse = 0;
- oc.TIM_OCPolarity = TIM_OCPolarity_High;
- oc.TIM_OCNPolarity = TIM_OCNPolarity_High;
- oc.TIM_OCIdleState = TIM_OCIdleState_Reset;
- oc.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
- TIM_OC2Init(TIM1,&oc);
- TIM_OC3Init(TIM1,&oc);
-
- nvic.NVIC_IRQChannel = TIM1_UP_IRQn;
- nvic.NVIC_IRQChannelPreemptionPriority = 0;
- nvic.NVIC_IRQChannelSubPriority = 0;
- nvic.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&nvic);
-
- TIM_ITConfig(TIM1, TIM_IT_Update,ENABLE);
- TIM_ClearFlag(TIM1, TIM_FLAG_Update);
-
- TIM_ARRPreloadConfig(TIM1, ENABLE);
-
- TIM_CtrlPWMOutputs(TIM1,ENABLE);
- TIM_Cmd(TIM1, ENABLE);
- }
- unsigned int irq_cnt = 0;
- void TIM1_UP_IRQHandler(void)
- {
- unsigned int n = 0;
-
- if (TIM_GetITStatus(TIM1,TIM_IT_Update)!= RESET)
- {
- n = irq_cnt%1000;
-
- if(n<=500)
- {
- TIM1->CCR2 = abs(table1000[n]);
- TIM1->CCR3 = 0;
- }
- else if(n>500)
- {
- TIM1->CCR3 = abs(table1000[n]);
- TIM1->CCR2 = 0;
- }
- irq_cnt ++;
-
- LED_RED_TOGGLE();
- TIM_ClearFlag(TIM1, TIM_FLAG_Update);
- }
- }
复制代码
最终实测波形生成:
发现,jlink接着电脑,当示波器的夹子,夹到电感的输出端,就像是短路了似的,电源箱过流报警,JLINK自动从电脑断开。
然后把jlink从电脑拔掉,就不短路了。
另外,在上述正常情况的基础上,用示波器探头测量正弦波的时候,电源箱显示电流会变大25mA左右,断开示波器探头,就正常了。
不懂为何了。 |