Arduinoで1HzのPWMを生成する

ArduinoではanalogWrite(pin,value)でPWM変調した矩形波を出力することができます。 通常のPWM周波数は490Hzや997Hzなのですが、 今回は、PWM周波数を1Hzとしたお話です。 analogWrite()は使わず、AVRライクな書き方をして、実現します。 ATmega328のデータシートとニラメッコしながらレジスタを設定します。 できればレジスタなんか面倒くさいしよくわからないから触りたくなかったんですけど、それしか方法がない! PWMとは この辺は自分の覚書でもあるので、わかる方はすっ飛ばしてください(^^) PWMは Pulse Width Modulation の頭文字をとったもので、文字通りパルス幅変調です。 矩形波の幅を自在に調整して、平均電圧を上げたり下げたりできます。 例えば、5Vの電圧をONしっぱなし(5Vだしっぱなし)なら平均電圧はもちろん5Vです。 ですが、PWMで周期T中のオン時間Tonの割合Duty( = Ton / T )が50%の矩形波を出していれば、平均電圧は 5V * 50% = 2.5V となり、半分の電圧を出していることになります。 これをLEDに繋げれば、ちょっと薄暗く点きますね。 こんな感じでDutyを色々変えれば、電圧を調整できることがわかります。 analogWrite関数では、analogWrite(pin,value)のvalueがDutyに相当します。 valueは0~255(= 8bit = 2^8 = 256)の値とします。 なぜ1Hz? 詳しくは別記事で紹介予定ですが、低温調理器で使うSSRを制御するためです(^^) SSRはAC電圧(交流電圧)を制御します。 PWMは、DC電圧(直流電圧)ではDutyで平均値として取り出せますが、ACだとDuty=50%としても半分の電圧にはなりません。 また、50Hzという遅い周波数を制御するので、ArduinoデフォルトのPWM周波数では早すぎました。 そこで、1Hzとしました。 ArduinoのPWM ところでPWMはタイマーという機能で実現しています。 これはArduinoに限らず、PICやmbedなどの他のマイコンもそうです。 ArduinoはATmega328というMicrochip社(旧Atmel社)のマイコンをメインチップとして載せています。 Arduinoには(というか、ATmega328)には以下の3つのタイマー(正確にはTimer/Counter)があり、Arduinoではそれぞれ以下のような役割になっています。(Unoの例です) Timer/Counter ビット数 Arduinoでのpin番号 Arduinoでの役割 ArduinoでのPWM周波数 Timer0 8bit 5,6 普通のデジタルピン,delay(),millis(),micros() PWM出すなら997Hz Timer1 16bit 9,10 普通のデジタルピン PWM出すなら490Hz Timer2 8bit 3,11 普通のデジタルピン,tone() 同上 タイマーは3つのうちどれを使ってもいいですが、Arduinoの機能としてあるdelay()やtone()でTimer0やTimer2を使っているので、Timer0や2のPWM周波数を変更してしまうと影響が出てしまいます。 例えば、delay(500)と書けば500msのウエイトが本来発生しますが、変更すると同じように書いても500msではなくなってしまいます。 ですので、何も使ってなさそうなTimer1(9か10pinのどちらか)を使うことにします。...

2020/05/30 · Last updated on 2022/05/12 · 3 min · 610 words

macOS Catalinaでは中華Arduino互換機(CH340G)がそのまま認識された

Amazonで売っている(売ってた)HiLetgoのarduino互換機 ArduinoのUSBシリアル通信部分にはATmega16U2やFT***が使われていて、これらはMacでも標準で認識しますが、安いArduino互換機に使われているCH340Gは別途ドライバを当てないと認識しない、という考えだったのですが、 何もしなくても認識しました という話です(macOS Catalinaにて) 参考サイトさんにてMojaveにて別途ドライバが不要との紹介をされていたので、より新しいCatalinaでも認識するだろうと思ってやりましたらいけました。情報ありがとうございます(^^) 具体的には、ArduinoをMacに接続すると、シリアルポートに表示がでますので選択します。 私の場合は、”/dev/cu.usbserial-1420”とでました。 ボードはNano、プロセッサはOld Bootloaderとします。 ちなみに、石の表面には何も書いてませんでした(^^) 本稿とは直接関係ないですが、入力の3端子レギュレータはAMS1117-5Vを使用しています。(5V出力) http://www.advanced-monolithic.com/pdf/ds1117.pdf 本家?はナショセミのLM1117だと思いますが、こちらは20Vまで入力できますが、AMS1117は15Vまでしか入力できませんので注意が必要です。 どちらにしろ12Vで使うには問題なさそうです。(が15Vだと結構ギリなので電源の品質が悪くてリプルが12Vを超えるようなら要注意です。) 参考

2020/05/10 · Last updated on 2020/05/10 · 1 min · 16 words