STM8S105C6 |
STM8S-DISCOVERYの場所 |
備考 |
|
波形出力ピン |
TIM1_CH1 PC1 26ピン ※1 |
CN2-2 |
PC1は基板上のSB3のジャンパ変更が必要 ※2 |
TIM1_CH1N PB0 22ピン ※1 (PC1のコンプリメンタリ) |
CN3-10 | option byte書き換えが必要 ※3 option byteとはなにかはこちらを読んでください |
|
波形周波数 |
1kHz |
||
波形duty |
TIM1_CH1 30% |
duty50%だと極性がわからんのであえて30%-70%とする |
|
TIM1_CH1N 70% | |||
デッドタイム |
64uSec |
デッドタイムとはなにかはこちらを読んでください |
|
BREAK機能 |
あり |
LOWでBREAKとする |
|
BREAK入力ピン |
TIM1_ETR PB3 19ピン ※1 |
CN3-7 |
option byte書き換えが必要 ※3 |
project |
TIM1_OC1Init()引数 |
TIM1_BDTRConfig()引数 | 出力信号 TIM1_CH1/TIM1_CH1N | なにが起きたかの解釈 |
test06 |
TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, 300, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET |
callしない |
1kHz duty30%/duty70% | @源発振クロックは16MHzに設定されている. Aそれを16分周して1MHzでカウンタが動く. Aカウンタは0〜999までカウントアップしてグルグル回る.1MHzで1000カウントするので1kHzになる. B閾値300でカウンタと比較した結果をパルスとして出す. パルスを出すピンは、TIM1_CH1とTIM1_CH1Nだと決まっている. BTIM1_CH1には、duty30%のパルスが出る. BTIM1_CH1Nには、その反転パルスであるduty70%のパルスが出る. この仕組みは下図のタイミングチャートに従っている. カウンタは青い線のように0〜999まで動いている. 閾値は300に設定されている. 比較結果がTIM1_CH1とTIM1_CH1Nに出力されている. |
test06b |
TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_DISABLE, 300, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET |
callしない | 1kHz duty30%/無信号(LOW) | クロック設定はtest06と同じだが、 1箇所DISABLEにした. その結果、TIM1_CH1Nに信号が出なくなった. |
test06c |
TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, 300, TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET |
callしない | 1kHz duty70%/duty70% | クロック設定はtest06と同じだが、 1箇所LOWにした. その結果、TIM1_CH1が反転した. |
test06d |
TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, 300, TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_LOW, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET |
callしない | 1kHz duty70%/duty30% | クロック設定はtest06と同じだが、 2箇所LOWにした. その結果、TIM1_CH1もTIM1_CH1Nも反転した. |
test06e |
TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, 300, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET |
TIM1_OSSISTATE_ENABLE, TIM1_LOCKLEVEL_OFF, 0xff, TIM1_BREAK_DISABLE, TIM1_BREAKPOLARITY_LOW, TIM1_AUTOMATICOUTPUT_ENABLE |
1kHz duty30%/duty70% DeadTime-63uSec | クロック設定はtest06と同じだが、 CTIM1_BDTRConfig()を追加した. 引数を0xFFにした結果、63uSecのデッドタイムが挿入されるようになった. 引数0xFFだとどうしてデッドタイムが63uSecになるのかは、Deadtime register (TIM1_DTR) の設定値とデッドタイム一覧表を参照のこと. |
test06f |
TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, 300, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET |
TIM1_OSSISTATE_ENABLE, TIM1_LOCKLEVEL_OFF, 0xff, TIM1_BREAK_ENABLE, TIM1_BREAKPOLARITY_LOW, TIM1_AUTOMATICOUTPUT_ENABLE |
1kHz duty30%/duty70% DeadTime-63uSec →TIM1_BKINをLOWにすると、 無信号 LOW/HIGH になる. | test06eにBREAK ENABLEを追加した. BREAK機能とは、モーターの回転を緊急停止するときに使われる機能である. TIM1_BKINピンがBREAK入力ピンだと決まっている. TIM1_BREAKPOLARITY_LOWの引数が設定されているので、TIM1_BKINピンをLOWにするとBREAKがかかるように設定されている. 実際に、STM8S-DISCOVERYのCN4-1ピンをGNDに接触させると、 TIM1_CH1=LOW TIM1_CH1N=HIGH に固定されてモーターを停止させる. |
test06g |
TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, 300, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET, TIM1_OCNIDLESTATE_RESET |
TIM1_OSSISTATE_ENABLE, TIM1_LOCKLEVEL_OFF, 0xff, TIM1_BREAK_ENABLE, TIM1_BREAKPOLARITY_LOW, TIM1_AUTOMATICOUTPUT_ENABLE |
1kHz duty30%/duty70% DeadTime-63uSec →TIM1_BKINをLOWにすると、 無信号 HIGH/LOW になる. |
test06eのRESET/SETを逆にしてSET/RESETにした. すると、BREAKしたときの無信号極性が逆になった. |
test06h |
TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, 300, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET, TIM1_OCNIDLESTATE_SET |
TIM1_OSSISTATE_ENABLE, TIM1_LOCKLEVEL_OFF, 0xff, TIM1_BREAK_ENABLE, TIM1_BREAKPOLARITY_LOW, TIM1_AUTOMATICOUTPUT_ENABLE |
1kHz duty30%/duty70% DeadTime-63uSec →TIM1_BKINをLOWにすると、 無信号 LOW/LOW になる. |
test06fからSET/SETに変更した. すると、BREAKしたときの無信号がLOW/LOWになってしまった.HIGH/HIGHじゃないことに注意. じつは、RESET/RESETにしてもBREAKしたときの無信号がLOW/LOWになってしまうのである. 無信号設定がコンプリメンタリじゃない場合は、LOW/LOWになってしまう仕様に留意されたい. |
test06i |
TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, 300, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_RESET, TIM1_OCNIDLESTATE_SET |
TIM1_OSSISTATE_ENABLE, TIM1_LOCKLEVEL_OFF, 0xff, TIM1_BREAK_ENABLE, TIM1_BREAKPOLARITY_LOW, TIM1_AUTOMATICOUTPUT_ENABLE |
1kHz duty70%/duty30% DeadTime-63uSec →TIM1_BKINをLOWにすると、 無信号 LOW/HIGH になる. |
test06fのPWM1をPWM2に変更した. PWM2だと、パルス極性が反転する. この仕組みは下図のタイミングチャートに従っている. カウンタは青い線のように0〜999まで動いている. 閾値は300に設定されている. 比較結果がTIM1_CH1とTIM1_CH1Nに出力されている.(PWM1と極性が逆である) ただし、BREAK時の無信号極性は、RESET/SETに従うことに留意されたし. |