Pinus0079 が 2021年12月26日17時54分13秒 に編集
コメント無し
本文の変更
概要 ==== Arduinoのタイマレジスタ設定についてまとめました。詳しい説明(プログラムの書き方など)については省略します。 Timer0 ====
![キャプションを入力できます](https://camo.elchika.com/2191335d394acf1c3ca72b13420fafd596d3be9a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f61366264353061362d623532322d343934322d383235612d6430323435393539653030312f61363435346338652d353462312d346638382d616234662d306463643230373337636561/)
![キャプションを入力できます](https://camo.elchika.com/2951fa49878bb7597329e67562bd42301d010edb/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f61366264353061362d623532322d343934322d383235612d6430323435393539653030312f34306561356465322d313935392d346661662d393933342d636366663937633763313638/)
※PC PWM = Phase Correct PWM Timer1 ====
![キャプションを入力できます](https://camo.elchika.com/b95276956c4358933f5b4178a626788ed3868d29/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f61366264353061362d623532322d343934322d383235612d6430323435393539653030312f39326538643264632d613662622d343761612d393536662d613732636135646166363933/)
![キャプションを入力できます](https://camo.elchika.com/2d3ecd9ae745bdeb28287ef4dff0a3872a2a7037/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f61366264353061362d623532322d343934322d383235612d6430323435393539653030312f38613361373264362d636462342d343962332d383732392d376635623864313738313938/)
※PC PWM = Phase Correct PWM ※PFC PWM = Phase and Frequency Correct PWM Timer2 ====
![キャプションを入力できます](https://camo.elchika.com/f8d1a832053484e13946ae6769f6c0ad05841718/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f61366264353061362d623532322d343934322d383235612d6430323435393539653030312f38623665333936622d653163372d346536642d396237302d663739373066343631616635/)
![キャプションを入力できます](https://camo.elchika.com/f4906591646d986401d3b4b0997da612fe10276f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f61366264353061362d623532322d343934322d383235612d6430323435393539653030312f66666335623333352d333232312d343963312d396232662d343335393265633434353231/)
※PC PWM = Phase Correct PWM PWM出力設定 ==== ![キャプションを入力できます](https://camo.elchika.com/d13093d169fe889581f11c4b6390e1e14e29d054/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f61366264353061362d623532322d343934322d383235612d6430323435393539653030312f31306564333333622d633263332d346433382d386336322d333430396630396534326337/) ※n = タイマ番号 分周比 ==== ![キャプションを入力できます](https://camo.elchika.com/962e823422a312a463c7c5206c9db22f6c53c853/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f61366264353061362d623532322d343934322d383235612d6430323435393539653030312f32653338646363622d333634312d343265302d396339382d303130653033373732656661/) ※n = タイマ番号 周波数の計算式 ==== ![キャプションを入力できます](https://camo.elchika.com/91d5e432ab19f12b5dd0b9867e428b20c7712195/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f61366264353061362d623532322d343934322d383235612d6430323435393539653030312f35363130363163632d303037362d346165362d393064362d643764653236383837613761/) ※n = タイマ番号 ※fclk = クロック周波数(Arduino UNO:16MHz) PWM出力ピンの対応関係 ==== ![キャプションを入力できます](https://camo.elchika.com/b46b65f4aa5ec1789ad24c47dda31addcc8d8e55/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f61366264353061362d623532322d343934322d383235612d6430323435393539653030312f38363333363033302d396232312d346231622d386362332d613061656166306639666334/) プログラム例 ==== ```arduino:PWM出力設定例 void setup() { pinMode(10,OUTPUT); //OC1B pinMode(9,OUTPUT); //OC1A /*タイマ1初期化*/ TCCR1A = 0; TCCR1B = 0; /* OC1A,OC1B 40kHz出力 * PWMモード:Fast PWM * 分周比:1 * TOP:ICR1 = 400 - 1 * OCR1A:コンペアマッチLOW * OCR1B:コンペアマッチLOW */ TCCR1A |= (1 << WGM11) | (1 << COM1A1) | (1 << COM1B1); TCCR1B |= (1 << WGM13) | (1 << WGM12) | (1 << CS10); ICR1 = 400 - 1; } void loop() { /*OC1A duty比0%出力*/ OCR1A = 0; /*OC1B duty比50%出力*/ OCR1B = 200 - 1; } ``` 最後に ==== タイマ0はdelay関数などで使用されているので、delay関数を使う場合は変更しない方が良いです。 もし間違った箇所があればコメントで教えて頂けるとありがたいです。 参考文献 ==== https://usicolog.nomaki.jp/engineering/avr/avrPWM.html https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf