не работает шим

Dmt
Offline
Зарегистрирован: 14.02.2016

Ардуино про мини, пробую настроить ПИД-регулятор, регулятор скорости с опто датчиком. При работе в какой-то момент времени в вывод А0 записывается значение, например 127, а на выходе - на самой ноге - напряжение 0. Двигатель останавливается, и пока не крутанешь рукой - стоит на месте.

#include <PID_v1.h>

const int analogOutPin = A0; // Analog output pin that the LED is attached to
volatile unsigned int tachBuf;

//мерим скорость вращения
//время между импульсами почемуто всегда разное   
ISR(TIMER1_CAPT_vect)   
{         
  TCNT1 = 0;
  tachBuf = ICR1+2;       
} 

//Define Variables we'll be connecting to
double Setpoint, Input, Output;
//Specify the links and initial tuning parameters
double Kp=1.5, Ki=0.0, Kd=0.00;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
  pinMode(analogOutPin,OUTPUT); 
   myPID.SetMode(AUTOMATIC);
   
  //настраиваем таймер для датчика скорости (списал откудато)
   TIMSK1=(1<<ICIE1);    
   TCCR1A=(0<<COM1A1)|(0<<COM1A0)|(0<<WGM11)|(0<<WGM10);     
   TCCR1B=(1<<ICNC1)|(1<<ICES1)|(0<<WGM13)|(0<<WGM12)|(0<<CS12)|(1<<CS11)|(1<<CS10);   
   TCNT1 = 0;  
 
    Setpoint = 100;
}

void loop() {
  if (Serial.available()) {
    Setpoint = Serial.read();
  }
  // read the analog in value:
  Input = map(tachBuf,479,11000, 255, 0);
  myPID.Compute();
  analogWrite(analogOutPin, Output);
  
 
  Serial.print("Val=");
 Serial.print(Setpoint);
 Serial.print("  Speed=");
 Serial.print(tachBuf);
 Serial.print("  Input="); 
 Serial.print(Input); 
 Serial.print("  Output="); 
 Serial.print(Output); 
 Serial.println("t"); 
}

 

Dmt
Offline
Зарегистрирован: 14.02.2016

Заметил если значение меньше 128 то на выходе 0 если больше то меняется от значения от 3.6 до 5 вольт

Dmt
Offline
Зарегистрирован: 14.02.2016

Народ что ни кто не сталкивался с таким? Все перепробовал, ну талкните в нужном напрвлении. Пробовал перекинуть и на другую ногу, и вообще переписал по новой просто пишу analogWrite(analogOutPin, 127); а на ноге ноль. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

В А0 можно записать либо 0 либо 1. Для ШИМа нужны другие ноги.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
Dmt пишет:
не работает шим
const int analogOutPin = A0; // Analog output pin that the LED is attached to
....
analogWrite(analogOutPin, Output);
 
 
Его, конечно, может и дураки писали, но у них написано, что не должен у Вас ШИМ работать, так, как Вы его пытаетесь заставить!
Dmt
Offline
Зарегистрирован: 14.02.2016

Ну раз назвали дураком тогда и лечите дальше, прежде чем собирать и разводить плату, я на макетке попробовал, на А0 ввел значение 130 - получил почти 3 вольта, потом ввел 200 - получил на ноге почти 4 вольта, потому и подумал что сдесь тоже работает шим. Ну не попробовал меньшие значения. И я так понемаю если шим не работает то вообще не работает а не на половину.

bwn
Offline
Зарегистрирован: 25.08.2014

Нету у ШИМа разных Вольтов на выходе, всего два значения LOW и HIGH. Все остальные эффекты - момент инерции)). Аналоговые входы умеют из аналогового сигнала делать цифровой, но не наоборот.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Dmt пишет:

Ну раз назвали дураком тогда и лечите дальше, прежде чем собирать и разводить плату, я на макетке попробовал, на А0 ввел значение 130 - получил почти 3 вольта, потом ввел 200 - получил на ноге почти 4 вольта, потому и подумал что сдесь тоже работает шим. Ну не попробовал меньшие значения. И я так понемаю если шим не работает то вообще не работает а не на половину.

Описание прочитали? Если да, то знаете на каких ногах есть ШИМ, а на каких нет. Вот на эти ноги и забивайтесь. А если не читаете принципиально, то как Вас лечить? Медицина бессильна.

Dmt
Offline
Зарегистрирован: 14.02.2016

Как работает шим могу объенить ещё тебе. Цифровые приборы показывают средне действующее значение. Поэтому можно говорить о выходном напряжении на ноге.

Где какие ноги я знал и раньше, просто платка разводилась удачно потому попробовал и клюнул что напряжение меняется. Вот теперь развел новую плату(ещё не травил) смотрю какая она не красивая и сложная по сравнению с первой. Вечером вытравлю и попробую. Макетка занета не охота разбирать.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Если всё так хорошо знаешь, что можешь другим объяснять, прекрати задавать детско-чайниковые вопросы и решай свои проблемы сам.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Dmt пишет:

Заметил если значение меньше 128 то на выходе 0 если больше то меняется от значения от 3.6 до 5 вольт

Значение от 3,5 до 5 В - это просто HIGH. Он не обязан быть 5В (читай даташит), он от 0,7*Vcc до Vcc - а это как раз от 3,5 до 5. Вот и всё, ни хрена там больше нет.

ШИМ работает только на специально выделенных ногах (по две ноги на таймер) и ни на каких других. Ты. конечно, это знаешь и можешь мне объяснить, но даташит посмотри всё же.

Dmt
Offline
Зарегистрирован: 14.02.2016

Если  напрягает чайниковые вопросы не отвечай.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Dmt пишет:

Если  напрягает чайниковые вопросы не отвечай.

Не напрягают. Напрягает, когда человеку говоришь "прочитай" и даёшь ссылку, а он нихрена не читает и продолжает нести какой-то бред про "наполовину работающий ШИМ". Вот это реально напрягает. Как можно помочь человеку, если он читает что ему говорят прочитать? Никак. Вот я и завязываю в этой теме.

Dmt
Offline
Зарегистрирован: 14.02.2016

Ну во первых я не говорил что не прочитал, ПРОЧИТАЛ, и с первого раза, просто не понял откуда 3,5 вольт при питании 5 вольт.

UFO 007
UFO 007 аватар
Offline
Зарегистрирован: 11.01.2018

Вам же сказали: "...почитай", а если лень, то от себя добавлю, что

Dmt пишет:

 

const int analogOutPin = A0; // Analog output pin that the LED is attached to
...
  pinMode(analogOutPin,OUTPUT); 

OUTPUT: стало быть - цифровой (но никак ни аналоговый и вообще А0 - АналогИнпут) - я на это ещё в Протеусе нарвался: до 127 - пин синий (лог "0"), а после 128 - красный (соответственно "1") - надо понимать: в цикле 

for i := 0 to #FF do
begin
  analogWrite(analogOutPin, i);// который А0
end;

 

b707
Offline
Зарегистрирован: 26.05.2017

Уфо... "до вас как до жирафа"... последнему посту ветки 2.5 года.

UFO 007
UFO 007 аватар
Offline
Зарегистрирован: 11.01.2018

спс... Я в курсе - мать писала

З.Ы. Глядишь поможет кому-нить не наступить на такие же грабли

А вААЩПе - ПИД-регулятор: ет мой больной мозоль - бьюсь пока как рыба об камень

Mono Typer
Offline
Зарегистрирован: 23.07.2020

Народ, если кто-то сдесь ещё сидит, можете подсказать почему может не работать шим на D3(UNO), если надо могу код скинуть(478 строк).

 

b707
Offline
Зарегистрирован: 26.05.2017

Mono Typer пишет:

можете подсказать почему может не работать шим на D3(UNO),

много почему, например плата сдохла... или ошибка в коде... или это вообще не ардуино.

Цитата:
если надо могу код скинуть(478 строк).

нам - не надо, а вы - решайте сами