PWMの方式変更

これまではモーターのスピード調整に100Hz程度でPWM制御していましたが、少し音も気になるので周波数を40KHz程になるよう方式を変えます。ハードの変更はしないでソフト変更のみで行います。

ループ内の2列車の進行方向が同じ時は正・負で分けている期間を両方とも正

か両方とも負にする予定です。

メインループでは、主にPCやリモコンボックスとのRS232C通信を行います。
【 app.c 】
void APP_Tasks(void) {
switch (appData.state) {
/* Application’s initial state. */
case APP_STATE_INIT:
{
//最初の1回のみ
初期化処理

case APP_STATE_SERVICE_TASKS:
{
//この部分が繰り返されます。
RS232C受信
RS232C送信
LCD表示
}

【timer_int.c】
TIMER0で20μsごとにInterrupt(割り込み)をかけます。
Timer0に48MHzが入力されているのでプリスケーラを外しTimer Periodを960にすると
1/48E6×960=20E-6で20μs(40kHz)
ごとにInterruptがかかります。
ここでtimer_int.cのvoid timer_int_func() が呼び出されます。

割込の頭のほうで駆動パルスをONにして、Speed値とTimerの値を比較して同じ以上になったときにパルスをOFFします。これでSPEED値が大きいほどパルス幅の大きなデューティー比のパルスが出来ます。

PIC32 Harmony 設定
【TIMER】(PRESCALE:1 TimerPeriod:960に変更)

【ADC】(変更なしです)

【I2C】(変更なしです)

 

【USART】(変更なしです)

【EXT INT】(変更なしです)

【PIN】(変更なしです)

【PIN Setting】(RB14変更)

コードの編集

コンパイラ疑似命令でMAINボードとSUBボードのコードを切り替える為、

sys_port_static.cdrv_tmr_static.cの一部をコメントアウトして、system_init.cで切り替えます。

 

 

system_init.cSYS_Initializeを編集します。

HeaderFiles app に atc.h を追加します。

app.h に追加します。

SourceFiles applcd.c を追加します。(変更なし)

SourceFiles apptimer_int.c を追加します。

app.c の void APP_Tasks ( void ) 以下を挿げ替えます。

system_interrupt.cの編集

上がExternalInterruptの割り込みで、下がTimerInterruptの割り込みです。

各部にtimer_int_func()を追加します。