Технический форум по робототехнике.
vvk74 » 15 июн 2017, 21:17
//например для ATMEGA48 будет как-то так
//РВ1 (ОС1А) надо сконфигурировать на выход
ICR1=0x270F; //записываем верхнее значение счетчика 9999 для 10 мс периода
TCNT1=0; //сбрасываем таймер
TCCR1A=0x82; //задаем режим работы 14 (fast PWM - TOP ICR1)
OCR1A=0xC8; // записываем длительность импульса 200 (для 200 мкс)
TCCR1B=0x1A; //запускаем с делителем на 8 (для тактовой 8МГц на входе таймера будет 1 МГц) - для 16 МГц значения ICR1 и OCR1A надо увеличить вдвое
Добавлено спустя 18 минут 34 секунды:
void setup() {
// put your setup code here, to run once:
pinMode(9, OUTPUT);
//например для ATMEGA48 будет как-то так
//РВ1 (ОС1А) надо сконфигурировать на выход
ICR1=0x4E1F; //записываем верхнее значение счетчика 9999 для 10 мс периода
TCNT1=0; //сбрасываем таймер
TCCR1A=0x82; //задаем режим работы 14 (fast PWM - TOP ICR1)
OCR1A=0x190; // записываем длительность импульса 200 (для 200 мкс)
TCCR1B=0x1A; //запускаем с делителем на 8 (для тактовой 8МГц на входе таймера будет 1 МГц) - для 16 МГц значения ICR1 и OCR1A надо увеличить вдвоеvvk74
}
void loop() {
// put your main code here, to run repeatedly:
}
проверил на ардуино нано - работает
к561ЛА7 » 16 июн 2017, 10:51
vvk74 писал(а)://например для ATMEGA48 будет как-то так
//РВ1 (ОС1А) надо сконфигурировать на выход
ICR1=0x270F; //записываем верхнее значение счетчика 9999 для 10 мс периода
TCNT1=0; //сбрасываем таймер
TCCR1A=0x82; //задаем режим работы 14 (fast PWM - TOP ICR1)
OCR1A=0xC8; // записываем длительность импульса 200 (для 200 мкс)
TCCR1B=0x1A; //запускаем с делителем на 8 (для тактовой 8МГц на входе таймера будет 1 МГц) - для 16 МГц значения ICR1 и OCR1A надо увеличить вдвое
Добавлено спустя 18 минут 34 секунды:
void setup() {
// put your setup code here, to run once:
pinMode(9, OUTPUT);
//например для ATMEGA48 будет как-то так
//РВ1 (ОС1А) надо сконфигурировать на выход
Спасибо
ICR1=0x4E1F; //записываем верхнее значение счетчика 9999 для 10 мс периода
TCNT1=0; //сбрасываем таймер
TCCR1A=0x82; //задаем режим работы 14 (fast PWM - TOP ICR1)
OCR1A=0x190; // записываем длительность импульса 200 (для 200 мкс)
TCCR1B=0x1A; //запускаем с делителем на 8 (для тактовой 8МГц на входе таймера будет 1 МГц) - для 16 МГц значения ICR1 и OCR1A надо увеличить вдвоеvvk74
}
void loop() {
// put your main code here, to run repeatedly:
}
проверил на ардуино нано - работает
Акелла » 21 окт 2017, 00:27
Делаю контролер нагрева питающийся от липо батареи
подскажите как сделать чтобы при достижении низкого напряжения отключать ардуину (отправить спать) пытался сделать но ничего не выходит.
Код собирал из кусочков, получилось что получилось, главное работает всё кроме контроля низкого заряда батареи.
Собираю все на ардуине нано
Вопрос 2) почему у меня получается слишком шумно на 5V линии. Т.е. не прямая линия на осциллоскопе а синусоида ~ +.- 100мв в районе 5в то же самое если посмотреть на выход с ШИМ периоды квадратные но разной высоты.
- Код: Выделить всё • Развернуть
//Voltage monitor website https://create.arduino.cc/projecthub/nickthegreek82/diy-voltmeter-with-arduino-and-a-nokia-5110-display-cc5092?ref=platform&ref_id=424_trending___&offset=49
int counter = 0;
int switchPin = 2;
int PWM_SET;
#define MIN_VOLT = 9.0;
//----PWM_ADJ------
int POT_PIN = A7;
//----PWM_ADJ_END------
//-------led outputs
int LED_GREEN = 5;
int LED_BLUE = 6;
int LED_RED = 7;
float VOLT_MIN;
float voltage = 0.0;
int sensorPin = A1;
float sensorValue = 0.0f;
String voltageString ="0.0";
int stringLength = 0;
float vout = 0.0;
float vin = 0.0;
float R1 = 83000.0;
float R2 = 18000.0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(switchPin, INPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
pinMode(LED_RED, OUTPUT);
}
void loop() {
//----провека напряжения на входеб если ниже 9В то ничего не делать.
// for (float i = 0; i < voltage; ++i){
// if (VOLT_MIN < voltage)
// continue;
//-------------pwm------- https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM
pinMode(3, OUTPUT);
// pinMode(11, OUTPUT);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20);
TCCR2B = _BV(CS22);
// OCR2A = 0; //pin 11
OCR2B = (PWM_SET);
/*
* Output A frequency: 16 MHz / 64 / 255 / 2 = 490.196Hz
Output A duty cycle: 180 / 255 = 70.6%
Output B frequency: 16 MHz / 64 / 255 / 2 = 490.196Hz
Output B duty cycle: 50 / 255 = 19.6%
Timer output Arduino output Chip pin Pin name
OC0A 6
OC0B 5
OC1A 9
OC1B 10
OC2A 11
OC2B 3
*/
// --------------pwm end
//---------------------------------pwm adjusts
int PWM_ADJUST, PWM_ADJ;
PWM_ADJ = analogRead(POT_PIN);
PWM_ADJUST = PWM_ADJ / 20;
//---button
//Handle input
int switchVal = digitalRead(switchPin);
if(switchVal == LOW)
{
delay(500);
counter ++;
//Reset count if over max mode number
if(counter == 7)
{
counter = 0;
}
}
else
//Change mode
switch (counter) {
case 1:
PWM_SET = 0;
digitalWrite(LED_GREEN, LOW);
digitalWrite(LED_BLUE, LOW);
digitalWrite(LED_RED, LOW);
break;
case 2:
PWM_SET = (50);
digitalWrite(LED_GREEN, 255);
digitalWrite(LED_BLUE, 0);
digitalWrite(LED_RED, 0);
break;
case 3:
PWM_SET = (100);
digitalWrite(LED_GREEN, 255);
digitalWrite(LED_BLUE, 255);
digitalWrite(LED_RED, 0);
break;
case 4:
PWM_SET = (150);
digitalWrite(LED_GREEN, 0);
digitalWrite(LED_BLUE, 255);
digitalWrite(LED_RED, 0);
break;
case 5:
PWM_SET = (200);
digitalWrite(LED_GREEN, 0);
digitalWrite(LED_BLUE, 255);
digitalWrite(LED_RED, 255);
break;
case 6:
PWM_SET = 254;
digitalWrite(LED_GREEN, 0);
digitalWrite(LED_BLUE, 0);
digitalWrite(LED_RED, 255);
break;
}
//----button end
voltage = readVoltage();
Serial.println(voltage);
Serial.println(PWM_SET);
voltageString = String(voltage,1);
stringLength = voltageString.length();
displayVoltage(stringLength);
delay(100);
}
//}
float readVoltage()
{
sensorValue = analogRead(sensorPin);
vout = (sensorValue * 5.0) / 1024.0;
vin = vout / (R2/(R1+R2));
return vin;
}
void displayVoltage(int length)
{
// switch(length)
{
// case 3: Serial.print(voltageString,14,19); break;
// case 4: Serial.print(voltageString,2,19); break;
// default: Serial.print(voltageString,2,19); break;
}
}
Dmitry__ » 21 окт 2017, 01:23
Акелла писал(а):Вопрос 2) почему у меня получается слишком шумно на 5V линии. Т.е. не прямая линия на осциллоскопе а синусоида ~ +.- 100мв в районе 5в
Надо сначала ответить на этот вопрос, это ненормально, проверять цепи питания и стабилизатор.
Акелла » 21 окт 2017, 01:36
Dmitry__ писал(а):это ненормально
что то пошло не так и мега испустила дымок, причем только когда повторно подключил к ЛБП.
линия питания теперь в коротком замыкании.
В первый запуск все работало нормально, ничего не грелось. Так и не понял как это произошло.
П.С. на схеме в середине нарисован конденсатор круглый, на самом деле это пьезодинамик, пока что не установлен.
Dmitry__ » 21 окт 2017, 01:39
А от чего все питалось? Может этот блок питания на помойку?
Акелла » 21 окт 2017, 01:41
БП самодельный, тороид +
DPS5015
Dmitry__ » 21 окт 2017, 01:48
Да, я поднял выше взгляд и увидел PCB
На PCB есть неоднозначность в виде непроведенного провода, но стабилизатор надо шунтировать конденсаторами по входу и выходу, как можно ближе к ножкам этой микросхемы, да простит меня dimamichev
Акелла » 21 окт 2017, 01:52
Там где непроведенные провода там идут перемычки с другой стороны платы, точки соединения нитками обозначены.
На стабилизаторе стоят 4.7uF на 5V и 100nF на входе
Dmitry__ » 21 окт 2017, 02:00
На pcb какой-то бред, ножка gnd стабилизатора lm1085 идет через резистор 10 ом на 1-ю ножку микроконтроллера. Больше никуда не идет, это очень плохо
схему можна?
Акелла » 21 окт 2017, 11:08
Там нет lm1085, название забыл стереть, стоит mosfet, подключен через 10 ом к выходу D3 а ардуине.
Снял ардуину, оказался пробитый 5v регуль, если на него давать питание сразу идет в КЗ, он помер и забрал с собой ардуину(новый регуль выдает 5в, как только поставил ардуину обратно, то сразу ушел в КЗ) вечером попробую поставить новый чип и электролит 100мкф на входе питания.
Dmitry__ » 21 окт 2017, 15:55
Ох ох ох
Может лучше было делать на готовых платах? Взять ардуинку про мини и плату ключей на мосфет...
Акелла » 21 окт 2017, 16:07
мне размер важен, старался уменьшить на сколько возможно.
Dmitry__ » 21 окт 2017, 16:26
ардуино про мини меньше
Angel71 » 21 окт 2017, 18:10
для компактности нужно детали соответствующие подбирать и нормально компоновать. для наглядности