|
本帖最后由 izhadapter 于 2020-1-9 17:12 编辑
_mcu.goodboard.ru/viewtopic.php?id=116#p2024
Данный кусок кода предназначен для переделки готового продукта (XY-LPWM3) который показан на картинке.
Это обычный генератор прямоугольных импульсов на три канала.
из него можно сделать трехфазный генератор синуса.
....
Это не полный код но основная заготовка с настройками и чтением таблицы значений синуса.
Значения таблицы синуса можно сгенерировать здесь: _daycounter.com/Calculators/Sine-Generator-Calculator2.phtml
Sine Look Up Table Generator Calculator:
второй и третий массив надо просто сместить первый на 1\3 (120 градусов)
_s.taobao.com/search?q=3%E8%B7%AFPWM%E8%84%89&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20200109&ie=utf8
- #include "N76E003.h"
- #include "Common.h"
- #include "Delay.h"
- #include "SFR_Macro.h"
- #include "Function_define.h"
- /************************************************************************************************************
- * Main function
- ************************************************************************************************************/
- void main(void)
- {
-
- P12_PushPull_Mode; // Cofigure pin to PP mode
- P10_PushPull_Mode;
- P11_PushPull_Mode;
-
- /**********************************************************************
- PWM frequency = Fpwm/((PWMPH,PWMPL) + 1) <Fpwm = Fsys/PWM_CLOCK_DIV>
-
- PWM frequency =16MHz/256=62,5KHz
- ***********************************************************************/
-
- PWM0_P12_OUTPUT_ENABLE; // Enable PWM outputs channel
- PWM1_P11_OUTPUT_ENABLE;
- PWM2_P10_OUTPUT_ENABLE;
-
- PWM_INT_PWM0; // Inerrupts from 0 channel
- PWM_FALLING_INT; //Setting Interrupt happen when PWM0 falling signal
-
-
-
- PWMPH = 0x00; //Setting PWM period
- PWMPL = 0xff;
-
- PWM0H = 0x00; //Setting PWM duty for 0,1,2 channel
- PWM0L = 0x01;
- PWM1H = 0x00;
- PWM1L = 0x01;
- PWM2H = 0x00;
- PWM2L = 0x01;
-
- set_EPWM; //Enable PWM interrupt
- set_EA; //Enable interrupts
- set_LOAD; // Load value from buffers to duty register
- set_PWMRUN; // Run PWM
- while(1);
- }
- /************************************************************************************************************
- * PWM interrupt subroutine
- ************************************************************************************************************/
- void PWM_ISR (void) interrupt 13
- {
- static volatile uint8_t counter;
- uint16_t temp;
- clr_PWMF; // clear PWM interrupt flag
-
-
- set_LOAD; //Update duty register from buffers
- temp=counter*3;
- PWM0L = sine_wave[temp]; // Load sine_wave value from table to buffers
- PWM1L = sine_wave[temp+1];
- PWM2L = sine_wave[temp+2];
-
-
-
-
- counter++;
-
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|